2013-04-25 41 views
-1

我在Java编程语言的观察,我们编写以下一样:为什么要将界面作为参考?

List mylist = new ArrayList();

为什么我们不应该用下列代替上述吗?

ArrayList mylist = new ArrayList(); 
+0

http://stackoverflow.com/questions/1686174/when-should-one-use-interfaces – Vitaly 2013-04-25 15:57:53

回答

0

,只是为了避免紧耦合。你理论上应该不会将自己与实现细节联系在一起,因为它们可能会发生变化,与接口契约相反,它应该是稳定的。另外,它确实简化了测试。

您可以将界面视为总体合同,所有实施类别必须服从。相反,特定于实现的细节可能会有所不同,比如数据如何在内部表示,访问等等 - 您永远不想依赖的信息。

1

虽然第二个选项是可行的,但第一个选项在大多数情况下更可取。通常情况下,您希望对接口进行编码,以使您的代码更少耦合且更有凝聚力。这是一种数据抽象,mylist(我建议myList)的用户不关心它的实际实现,只是它是一个列表。

0

如果你使用ArrayList,你说它必须是一个ArrayList,而不是任何其他种类的List,并且要替换它,你将不得不改变对该类型的每个引用。如果您使用List您清楚地表明没有什么特别的列表,并且它被用作普通列表。可以通过更改一行来更改为另一个列表。

1

我们可能想在某些时候改变底层的数据结构,通过保持引用,我们只需要改变声明。