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