-1

我在 Java 编程语言中观察到,我们的代码如下:

List mylist = new ArrayList();

为什么我们不应该使用以下而不是上面的?

ArrayList mylist = new ArrayList();
4

5 回答 5

1

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

于 2013-04-25T15:57:43.433 回答
1

我们可能希望在某个时候更改底层数据结构,并且通过保留引用,我们只需要更改声明。

于 2013-04-25T15:57:50.370 回答
1

Abstract Data Type与的分离是面向对象编程specific implementation的关键方面之一。

请参阅接口实例化

于 2013-04-25T15:58:12.387 回答
0

如果您使用 ArrayList,您是说它必须是 ArrayList,而不是任何其他类型的 List,并且要替换它,您必须更改对该类型的每个引用。如果您使用List,则表明列表没有什么特别之处,它被用作普通列表。只需更改一行即可将其更改为另一个列表。

于 2013-04-25T15:57:48.267 回答
0

只是为了避免紧耦合。从理论上讲,您不应该将自己束缚在实现细节上,因为它们可能会发生变化,这与应该是稳定的接口契约相反。此外,它确实简化了测试。

您可以将接口视为所有实现类必须遵守的整体契约。相反,特定于实现的细节可能会有所不同,例如数据在内部的表示方式、访问方式等 - 您永远不想依赖的信息。

于 2013-04-25T16:02:56.390 回答