我在某处读到我们应该像这样多态地实例化 ArrayList:
List myList = new ArrayList();
但是如果我使用
ArrayList myList = new ArrayList();
这种方法当我输入myList.(ctrl+space)
时可以看到更多的方法
请指导我了解它们之间的差异(优缺点)
最佳答案
通常,您对接口(interface)进行编码的原因是,如果有意义的话,您可以更换稍后使用的具体类。例如,如果您因为发现内存碎片/重新分配问题而需要将 ArrayList
替换为 LinkedList
。您只需更改构造对象的行,而不是其他代码,因为您编码为 List
接口(interface),并且这两个具体类都实现了 List
。
如果您需要使用List
接口(interface)上没有的ArrayList
方法之一,那么可以更改声明并使用该方法。那么,您只需要意识到,您将代码与特定的具体类 ArrayList 紧密耦合,而不是与广泛实现的接口(interface) List 紧密耦合。类别范围。
您的默认位置应该是向接口(interface)编写代码,因为这可以为您提供最大的灵 active /最小的耦合。但这并不意味着您在需要时不直接使用该类,只是您开始时要尽可能灵活。
关于java - "coding to an interface"的OOP原理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14796478/