我在某处读到我们应该多态地实例化一个ArrayList:
List myList = new ArrayList();
但如果我使用
ArrayList myList = new ArrayList();
这种方法当我输入myList.(ctrl+space)
请指导我们之间的差异(利弊)
答案 0 :(得分:4)
通常,您编写接口的原因是,如果有意义的话,您可以替换稍后使用的具体类。例如,如果您需要为ArrayList
交换LinkedList
,因为您发现了内存碎片/重新分配问题。您只需要更改构造对象的行,而不是其他代码,因为您编写了List
接口,并且这两个具体类都实现了List
。
如果需要使用ArrayList
接口之外的List
方法之一,则可以更改声明并使用该方法。那么,您必须要注意,您将代码紧密地耦合到ArrayList
,这是一个特定的具体类,而不是List
,这是一个由各种类实现的接口。
您的默认位置应该是对接口进行编码,因为这样可以提供最大的灵活性/最小耦合。但这并不意味着你不需要在你需要时直接使用这个类,只是你开始尽可能灵活。
答案 1 :(得分:0)
如果您使用您提出的方法,您将对容器的特定实现紧密,这在许多情况下并不好。如果您需要使用ArrayList
中仅存在的方法,则可以选择两种方式 - 将myList
声明为ArrayList
或将myList
声明为只需要找到的方法ArrayList
。