OOP“编码到接口”的原则?

时间:2013-02-10 09:53:19

标签: java arraylist

我在某处读到我们应该多态地实例化一个ArrayList:

List myList = new ArrayList();

但如果我使用

ArrayList myList = new ArrayList(); 

这种方法当我输入myList.(ctrl+space)

时,我可以看到更多的方法

请指导我们之间的差异(利弊)

2 个答案:

答案 0 :(得分:4)

通常,您编写接口的原因是,如果有意义的话,您可以替换稍后使用的具体类。例如,如果您需要为ArrayList交换LinkedList,因为您发现了内存碎片/重新分配问题。您只需要更改构造对象的行,而不是其他代码,因为您编写了List接口,并且这两个具体类都实现了List

如果需要使用ArrayList接口之外的List方法之一,则可以更改声明并使用该方法。那么,您必须要注意,您将代码紧密地耦合到ArrayList,这是一个特定的具体类,而不是List,这是一个由各种类实现的接口。

您的默认位置应该是对接口进行编码,因为这样可以提供最大的灵活性/最小耦合。但这并不意味着你不需要在你需要时直接使用这个类,只是你开始尽可能灵活。

答案 1 :(得分:0)

如果您使用您提出的方法,您将对容器的特定实现紧密,这在许多情况下并不好。如果您需要使用ArrayList中仅存在的方法,则可以选择两种方式 - 将myList声明为ArrayList或将myList声明为只需要找到的方法ArrayList