使用Collection接口创建ArrayList对象的多态性有什么好处?

2024-03-08

我研究了多态性并了解它可以进行动态方法绑定,如下所示。

假设 Animal 类是抽象类。

public class AnimalReference
{
  public static void main(String args[])
  Animal ref                 // set up var for an Animal
  Cow aCow = new Cow("Bossy"); // makes specific objects
  Dog aDog = new Dog("Rover");

  // now reference each as an Animal
  ref = aCow; ref.speak();
  ref = aDog; ref.speak();
}

我曾经创建 ArrayList 的实例,例如:

ArrayList myList = new ArrayList();

但通常我认为人们会写:

Collection myList = new ArrayList();

所以我的困惑是声明为 Collection 有什么好处?我也不知道你可以在“myList”前面添加“Collection”(这是一个接口而不是抽象类)。

为什么仅仅说以下内容不是一个好习惯:

ArrayList myList = new ArrayList();

我阅读了 Collection 接口和 ArrayList Java 文档以及在线教程,但仍然不太清楚。 有人能给我一些解释吗?


如果你声明myList as ArrayList,你修复它的具体类型。每个使用它的人都将依赖于这个具体类型,并且很容易(甚至是无意中)调用特定于的方法ArrayList。如果稍后您决定将其更改为例如LinkedList http://java.sun.com/j2se/1.5.0/docs/api/java/util/LinkedList.html or CopyOnWriteArrayList http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/CopyOnWriteArrayList.html,您需要重新编译 - 甚至可能更改 - 客户端代码。接口编程消除了这种风险。

请注意,之间Collection and ArrayList,还有另一个抽象层次:List http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html界面。通常,列表的使用模式与映射、集合或队列的使用模式非常不同。因此,您的工作所需的集合类型通常是早期决定的,并且不会改变。将您的变量声明为List明确这一决定,并向客户提供有关该收藏所遵守的合同的有用信息。CollectionOTOH 通常除了迭代其元素之外没有多大用处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Collection接口创建ArrayList对象的多态性有什么好处? 的相关文章

  • 获取对 JOptionPane 静态方法创建的对象的引用

    我想知道是否可以获取对由 JOptionPane 的静态方法之一 例如 showMessageDialog 创建的 JDialog 对象的引用 我打算修改对话框在屏幕上出现的位置 更具体地说 我希望对话框默认显示在主应用程序窗口的左上角 而
  • 在 JRE 级别限制密码套件

    我们的 Java 应用程序公开了许多不同的接口 SMTP FTP HTTP 并通过 SSL TLS 进行保护 现在的目标是限制这些接口上允许的密码套件仅包含 强 密码套件 我已经有了一个列表 并且很清楚如何使其适用于特定套接字 socket
  • UnknownHostException:名称或服务未知

    我正在尝试使用 com squareup okhttp 中的 OkHttpClient 从 API 返回一些数据 我遇到了一些错误 我最终能够克服这些错误 但我无法克服这个主机异常错误 并且这里似乎没有任何内容足够具体到我的情况能够解决 下
  • Java中使用正则表达式确定字符串是否为URL [重复]

    这个问题在这里已经有答案了 可能的重复 检查字符串是否为有效 URL 的最佳正则表达式是什么 https stackoverflow com questions 161738 what is the best regular express
  • Java如何从字符串实例化一个类[重复]

    这个问题在这里已经有答案了 可能的重复 在 Java 中从变量创建新类 https stackoverflow com questions 1268817 create new class from a variable in java 我
  • Java - 直观地拖动摆动元素

    有没有类似的解决方案http allen sauer com com allen sauer gwt dnd demo DragDropDemo DragDropDemo html PaletteExample http allen sau
  • 搜索 JTable 时 - 未获得正确的 ID

    所以我尝试在搜索名称后单击表 然后在其他表中编辑它 问题是我没有获得正确的 ID 而只获得第一个 ID JTable https i stack imgur com TnNIq png 搜索行动 https i stack imgur co
  • 如何在 JAVA servlet 中处理压缩 (gzip) HTTP 请求(不是响应) - 简单示例?

    我为这个问题苦苦挣扎了很长一段时间 在找到一个简单的解决方案后 想问一个问题和答案 这个问题在堆栈溢出时以不同的方式被多次提出 并且accepted solutions是partially correct and complex或谈论res
  • 此代码签名证书对于签名小程序有效吗?

    我们购买了代码签名证书来签名小程序 但在签名小程序时出现以下错误 C CM WEB INF gt jarsigner keystore code signing keystore C CM SweetApplet jar code sign
  • Java 8 流排序字符串列表[重复]

    这个问题在这里已经有答案了 我正在流上调用排序方法 java 文档说 Sorted 方法返回一个由该流的元素组成的流 并根据自然顺序排序 但是当我运行下面的代码时 List
  • 在 Java/Android 中查找 UTF-8 字符串中的字符数

    我试图找出字符串以 UTF 8 存储时的长度 我尝试了以下方法 String str Charset UTF8 CHARSET Charset forName UTF 8 byte abc str getBytes UTF8 CHARSET
  • Preg_match PHP 到 java 的翻译

    我在将 php preg match 转换为 java 时遇到一些问题 我以为我的一切都是正确的 但它似乎不起作用 这是代码 原始PHP Pattern for 44 Character UUID pattern 0 9A F 44 if
  • 使用电子邮件、用户名和密码进行 Firebase 身份验证

    我想知道是否可以使用电子邮件和用户 ID 密码登录 我有一个项目 我希望用户添加一个唯一的号码 实际上是我们公司提供的工作识别号码 以便能够签名参与该计划的人员将继续留在公司就业 即使电子邮件和密码正确但用户 ID 错误 我也需要 fire
  • Java - 修剪字节数组中的尾随空格

    我有与此类似的字节数组 77 83 65 80 79 67 32 32 32 32 32 32 32 大致等于 M S A P O C when printed as chars 现在我想修剪尾随空白 使其看起来像 77 83 65 80
  • 多少次函数调用会导致堆栈溢出

    你好 Android Java 开发者 当一个函数调用一个函数并且该函数调用另一个函数等等时 有多少次调用 堆栈长度 会让我陷入堆栈溢出 有一般经验法则吗 我问的原因是因为我现在对于我的 5 人纸牌游戏来说哪个更有效 设计明智 解决方案一
  • 从流中过滤/删除无效的 xml 字符

    首先 我无法更改 xml 的输出 它是由第三方生成的 他们在 xml 中插入无效字符 我得到了 xml 字节流表示形式的 InputStream 除了将流消耗到字符串中并对其进行处理之外 是否有一种更干净的方法来过滤掉有问题的字符 我找到了
  • Java 有现成的时钟同步解决方案吗?

    我们有一个大型的高性能软件系统 它由多个交互的 Java 进程 不是 EJB 组成 每个进程可以在同一台机器上 也可以在不同的机器上 某些事件在一个进程中生成 然后以不同的方式传播到其他进程以进行进一步处理等 出于基准测试的目的 我们需要创
  • JavaFX:在 WebView img 标签中未加载本地图像

    以下是我的代码 一切安好 我可以加载远程页面 我可以放置 HTML 内容 但我的img标签显示一个X标志表示无法加载图像 Note 我的图像与类位于同一个包中JavaFX在 Smiley 文件夹中 我可以列出所有图像 这意味着路径没有问题
  • javaFX,抛出 NullPointerException,位置是必需的

    我看过其他答案 但没有任何帮助我 抱歉 GUI新手只知道swing的基础知识 这是主课 package application import javafx application Application import javafx fxml
  • 数组所有可能的组合

    我有一个字符串数组 ted williams golden voice radio 我希望这些关键字的所有可能组合采用以下形式 ted williams golden voice radio ted williams ted golden

随机推荐

  • CouchDB 每用户 db 具有共享数据可扩展性

    I have an application with the following architecture 主 couchdb 需要在用户之间共享数据 EG 如果 user 1 将数据写入云 则会复制到主服务器并返回到 user 2 和 u
  • 如何在一定时间后停止纹理滚动

    我下面有这段代码 只是用四边形制作滚动背景 我的问题是如何在一段时间后停止背景的滚动 例如 我希望在到达滚动图像的末尾后 将最后一个可见的部分锁定为关卡其余部分的背景 由于我的播放器速度恒定 我想象这样的事情 大约 20 秒后 停止滚动并保
  • 将 git 子树移动到不同的存储库中

    我尝试将目录及其所有历史记录从存储库移动到另一个存储库 提取目录的完整历史记录很容易git subtree split 这将创建一个新分支 可以轻松地将其提取到其他存储库 现在我用了git subtree add将目录粘贴回第二个存储库 如
  • 谷歌 reCaptcha - [“缺少输入响应”,“缺少输入秘密”]

    我从 Google API 对 ReCaptcha RequestMethod Post php 进行了一些更改 class Post implements RequestMethod URL to which requests are P
  • Django allauth 不发送 https 链接

    我希望 Django Allauth 发送确认电子邮件或重置密码等链接https 像这样的事情 https example com ca accounts confirm email picuwfpjpptjswi50x5zb4gtsqpt
  • phpmyadmin:MySQL 的表行计数不正确

    我有一个表 根据 phpmyadmin 的行数约为 76 000 行 显示行 0 99 总共约 76 853 行 查询花费了 0 0322 秒 然而 当尝试在 4950 个条目后从 phpmyadmin 浏览时 我得到空结果 没有显示任何内
  • 如何为 Linux:KDE、Gnome 等设置应用程序的桌面图标?

    我有一个可以在 Windows Linux 和 Macintosh 上运行的跨平台程序 我的 Windows 版本有一个图标 但我不知道如何为我的 Linux 版本制作一个图标 KDE Gnome 等有标准格式吗 还是我必须为每一种格式做一
  • 为什么使用“using 指令”时 ADL 不起作用?

    这是一个类似的问题 https stackoverflow com questions 24384020 why does the compiler stops the name lookup on overloads 但是在这个问题中它有
  • 如何排除私有标头出现在源浏览器中?

    我已经设定SOURCE BROWSER NO and VERBATIM HEADERS YES因为我希望客户端能够看到头文件 但是 我只想让他们看到某些标题 最好的方法是如何做到这一点 预先感谢您的任何帮助 EDIT 这似乎可行 但我对其他
  • 使用 CMake 的详细 NMake Makefile

    我一直遵循常见问题解答中的说明 是否可以选择生成更多 详细 编译 http www cmake org Wiki CMake FAQ Is there an option to produce more 27verbose 27 compi
  • Angular 和 p5.js - p5.loadSound 不是函数

    当我想在我的 Angular 项目中使用 p5 js 时遇到问题 我使用 Angular CLI 将 p5 js 包含在我的 angular cli json file scripts node modules p5 lib p5 min
  • Django 模型中的隐藏字段

    不久前我做了一个模型类 我为它制作了几个 ModelForm 效果非常好 我最近不得不向其中添加另一个可选 blank True null True 字段 以便我们可以存储用户之间的一些关系数据 它本质上是一个推荐系统 问题是添加这个新字段
  • 为什么在 TestNG 中 @DataProvider 注解在 @BeforeClass 之前运行?

    Using TestNG http testng org 为什么 DataProvider之前运行 BeforeClass 似乎有时 DataProvider之前运行 BeforeClass有时不是 有谁知道原因吗 这就是今天的实施方式 这
  • 使用 php 将文件上传到网站

    我是 php 新手 我正在尝试从这里修改代码 http www w3schools com php php file upload asp http www w3schools com php php file upload asp文件上传
  • 打开chm文件目录的特定部分c#或vb.net

    我有一个名为 help 的 chm 文件 在该文件中我有一个如下结构 Introduction item1 item2 Topic1 item1 item2 Topic2 item1 item2 Topic3 现在我想在 c 或 vb ne
  • 我在哪里可以获得 OpenJDK (Windows) 的预构建 JavaFX 库 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在 Windows 上进行开发 并用 OpenJDK 替换了 Oracle JDK 我注意到 Ope
  • 使用 pandas 绘图时,图例仅显示一个标签

    我有两个 Pandas DataFrame 我希望将它们绘制成单个图形 我正在使用 IPython 笔记本 我希望图例显示两个 DataFrame 的标签 但到目前为止我只能显示后一个 此外 任何关于如何以更合理的方式编写代码的建议将不胜感
  • 创建 Google 图表并转换为图像服务器端

    我目前在我的网站上的几个地方实现了谷歌图表 我可以将它们转换为图像并下载它们 那很简单 现在我希望创建这些图表并将它们转换为服务器上的图像 我做了很多搜索 但没有找到任何例子 也没有提出任何问题 这开始让我认为这是不可能的 我知道这些图表通
  • bootstrap:仅更改特定模态的模态背景不透明度

    我有一个包含多种模式的菜单 当我打开一个又一个时 背景会变成黑色 这很丑 我明白我需要改变filter alpha opacity 80 in modal backdrop fade in在 bootstrap css 中 但我需要更改它
  • 使用Collection接口创建ArrayList对象的多态性有什么好处?

    我研究了多态性并了解它可以进行动态方法绑定 如下所示 假设 Animal 类是抽象类 public class AnimalReference public static void main String args Animal ref s