可能重复:
为什么要首选 Java 类的接口?
我对 java 比较陌生,我刚刚开始使用集合框架。虽然ArrayList
我遇到了人们声明它的两种方式。例如声明一个ArrayList
of String
s :
List<String> l = new ArrayList<String>();
或者
ArrayList<String> al = new ArrayList<String>();
我应该使用这两者中的哪一个,它们之间有什么区别?
我知道调用的实际方法是在运行时决定的,因此调用的方法都只是ArrayList
类的,但第一个声明仍然限制了可以调用的方法。
第一种方法,我听说,称为“对接口进行编码”。任何方法都将使用该变量调用l
,因此只能调用List
接口提供的方法,而在第二个示例中,我们不仅可以调用类提供的所有方法,还可以调用List
类提供的所有方法Object
(例如finalize()
,wait()
等)。那么为什么甚至首先人们甚至使用第一个声明?