我在Java编程语言的观察,我们编写以下一样:为什么要将界面作为参考?
List mylist = new ArrayList();
为什么我们不应该用下列代替上述吗?
ArrayList mylist = new ArrayList();
我在Java编程语言的观察,我们编写以下一样:为什么要将界面作为参考?
List mylist = new ArrayList();
为什么我们不应该用下列代替上述吗?
ArrayList mylist = new ArrayList();
,只是为了避免紧耦合。你理论上应该不会将自己与实现细节联系在一起,因为它们可能会发生变化,与接口契约相反,它应该是稳定的。另外,它确实简化了测试。
您可以将界面视为总体合同,所有实施类别必须服从。相反,特定于实现的细节可能会有所不同,比如数据如何在内部表示,访问等等 - 您永远不想依赖的信息。
虽然第二个选项是可行的,但第一个选项在大多数情况下更可取。通常情况下,您希望对接口进行编码,以使您的代码更少耦合且更有凝聚力。这是一种数据抽象,mylist(我建议myList)的用户不关心它的实际实现,只是它是一个列表。
如果你使用ArrayList,你说它必须是一个ArrayList,而不是任何其他种类的List,并且要替换它,你将不得不改变对该类型的每个引用。如果您使用List
您清楚地表明没有什么特别的列表,并且它被用作普通列表。可以通过更改一行来更改为另一个列表。
我们可能想在某些时候改变底层的数据结构,通过保持引用,我们只需要改变声明。
Abstract Data Type
和specific implementation
的分离是object oriented programming的关键方面之一。
http://stackoverflow.com/questions/1686174/when-should-one-use-interfaces – Vitaly 2013-04-25 15:57:53