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

发布于 2021-01-31 15:32:14

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

假设动物类是抽象类。

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文档以及在线教程,但仍然不太清楚。有人可以给我一些解释吗?

关注者
0
被浏览
93
1 个回答
  • 面试哥
    面试哥 2021-01-31
    为面试而生,有面试问题,就找面试哥。

    如果声明myListArrayList,则修复其具体类型。每个使用它的人都将取决于此具体类型,并且很容易(甚至无意间)调用特定于的方法ArrayList。如果过了一段时间,您决定将其更改为例如LinkedListCopyOnWriteArrayList,则需要重新编译-
    甚至可能更改-客户代码。接口编程消除了这种风险。

    请注意,在Collection和之间ArrayList,还有另一个抽象层次:List接口。通常,列表的使用模式与映射,集合或队列的使用模式非常不同。因此,您通常需要尽早确定工作所需的收藏类型,并且不会改变。将变量声明为a
    List可使此决定变得清晰,并向其客户提供有关此集合遵守的合同的有用信息。Collection通常,OTOH除了迭代其元素外,并没有太多用处。



推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看