好的,所以我知道Set,List并且Map是接口,但是什么使得第一行代码比第二行更好?List myArr = new ArrayList();ArrayList myArr = new ArrayList();
3 回答

慕盖茨4494581
TA贡献1850条经验 获得超11个赞
如果您使用第一个表单,则表示您将要使用的所有内容都是List
接口的功能- 没有别的,特别是任何实现它都没有额外添加。这意味着你可以很容易地改变所使用的实现(例如,刚刚替补LinkedList
用于ArrayList
在实例化),而不用担心它打破了代码的其余部分,因为你可能已经用具体的东西ArrayList
。

慕姐4208626
TA贡献1852条经验 获得超7个赞
从ArrayList
这里的源代码可以看出,实现的大部分方法都是注释的,@override
因为所有这些方法都是通过List
接口定义的,如果你只使用基本功能(那就是你大部分时间都要做的)差异不会是任何实际的差异。
如果有一天你会认为它的特征ArrayList
不再适用于你的问题并且你需要不同的东西(LinkedList
例如),那么差异就会到来。如果您将所有内容声明为List
实例化,ArrayList
则可以通过更改实例化来轻松切换到新实现,new ArrayList()
而在其他情况下,您还必须更改所有变量声明。
使用List list = new ArrayList()
更多OOP样式,因为您声明您不关心列表的特定实现,并且您想要丢弃有关该类型的静态信息,因为您将依赖于此类集合提供的接口从其中抽象出来实现。
添加回答
举报
0/150
提交
取消