gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:31:27 24 4
gpt4 key购买 nike

我研究了多态性,了解到它可以像下面这样进行动态方法绑定(bind)。

假设类 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”(它是一个接口(interface)而不是抽象类)。

为什么只说:

ArrayList myList = new ArrayList();

我看了Collection接口(interface)和ArrayList Java文档以及网上教程,但还是不太清楚..谁能给我一些解释?

最佳答案

如果您将myList 声明为ArrayList,您就固定了它的具体类型。每个使用它的人都将依赖于这个具体类型,并且很容易(甚至无意中)调用特定于 ArrayList 的方法。如果稍后您决定将其更改为例如LinkedListCopyOnWriteArrayList ,您需要重新编译 - 甚至可能更改 - 客户端代码。接口(interface)编程消除了这种风险。

请注意,在 CollectionArrayList 之间,还有另一个抽象级别:List界面。通常,列表的使用模式与映射、集合或队列的使用模式非常不同。因此,一份工作所需的 Collection 品类型通常在早期就已决定,并且不会改变。将您的变量声明为 List 可以明确此决定,并为其客户提供有关此集合所遵守的契约(Contract)的有用信息。 Collection OTOH 除了遍历其元素外通常不是很有用。

关于java - 使用 Collection 接口(interface)创建 ArrayList 对象的多态性有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3356113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com