可能重复:
ArrayList 声明 Java
在 Java 中,为什么 ArrayList 经常使用 List 来声明?
List<String> strList1 = new ArrayList<String>();
ArrayList<String> strList2 = new ArrayList<String>();
我无法理解这两者之间的区别。这个比那个好吗?或有特定用途?
可能重复:
ArrayList 声明 Java
在 Java 中,为什么 ArrayList 经常使用 List 来声明?
List<String> strList1 = new ArrayList<String>();
ArrayList<String> strList2 = new ArrayList<String>();
我无法理解这两者之间的区别。这个比那个好吗?或有特定用途?
该类ArrayList
实现List
接口。
声明接口类型的对象并使用该接口的实现来实例化它通常是一个好习惯。
这样,您可以在需要时更改实现,但声明的类型保持不变。这样,您可以避免修改太多代码,尤其是在将变量作为参数的方法中。该方法不断获取 aList
作为参数,而不是某个实现。
在 Java 中,接口中的 List,而 ArrayList 是实现该接口的几个类之一。第一种表示法的优点是您可以轻松更改使用的实现,而无需更改其余代码。例如,您可能稍后决定使用 Vector 而不是 ArrayList,因此您可以将代码更改为如下所示:
List<String> strList1 = new Vector<String>();
这里的想法是您正在设计界面而不是具体对象本身。从某种意义上说,接口更灵活,如果您愿意或需要,您可以稍后strList1
换掉LinkedList
。
可替代性是面向对象编程的一个原则。它指出,在计算机程序中,如果 S 是 T 的子类型,则类型 T 的对象可以用类型 S 的对象替换(即,类型 S 的对象可以替换类型 T 的对象)而不改变任何该程序的理想属性(正确性、执行的任务等)。
ArrayList
是 的子类型List
。
它对这个问题并不特别,但始终建议使用接口而不是类来保持引用,这使您可以随时更改实现。例如,您可以随时将其更改为链接列表
当您将代码绑定到接口时,您可以在需要时非常轻松地更改实现类。
如果您按具体类进行编码,则可以通过使您的代码绑定到该类来使用特定于该类的功能。未来的更换变得困难。
要更好地理解该功能,请考虑来自第三方的类。您不需要将您的代码依赖于任何特定的供应商。您可以随时将课程更改为其他供应商。两者都受界面约束,因此更改很容易。
我认为基本上,以前的回复是说您可以将 List 向上转换为 ArrayList 或另一个也实现 List 接口的对象。