声明List l = new ArrayList()和ArrayList al = new ArrayList()

时间:2012-10-09 03:28:06

标签: java

  

可能重复:
  List versus ArrayList as reference type?

声明List l = new ArrayList()和ArrayList al = new ArrayList()

之间有什么区别

3 个答案:

答案 0 :(得分:5)

当您声明List l = new ArrayList()时,l仅限于接口List提供的方法,而当您声明它ArrayList al = new ArrayList()时,它可以使用arraylist中的所有方法和字段。

当你声明它List l时,你可以提供更大的灵活性,因为如果你想在不破坏任何代码的情况下,可以在以后更改适合的事情的ArrayList。

修改

正如Chin Boon所指出的,你可以将l转换为ArrayList,从而使用ArrayLists的方法。但是通常如果你发现自己依赖于ArrayList的特定方面,那么对接口(List)的编程几乎没有意义。

答案 1 :(得分:0)

ListInterface(超类型的ArrayList,LinkedList)。 当你坐下List l = new ArrayList();时 您正在使用超类引用创建子类对象,因此您只能访问超类的方法,但是在重写方法的情况下,将调用子类方法。

在你的情况下:

List l = new ArrayList()

您只能调用list interface中声明的方法和字段。

ArrayList al = new ArrayList()

您将能够从列表和arraylist中调用方法和字段。

当你使用方法1

创建一个arraylist时也是如此
List l = new ArrayList();

稍后您可以使用相同的引用来创建像

这样的LinkedList

l = new LinkedList(); 你不能使用方法2: ArrayList al = new ArrayList()

al = new LinkedList()// cannot do this

答案 2 :(得分:0)

将变量声明为List类型会告诉编译器确切地说它允许您使用该变量。在这种情况下,您可以执行List接口定义的所有操作。由于ArrayList实现了List,您当然可以将ArrayList分配给List变量,但是您只能访问List接口中定义的内容,即使ArrayList具有除List接口指定之外定义的其他方法。另一方面,将类型声明为ArrayList允许您执行ArrayList类定义的任何操作,即使它未由List类型定义。但是,如果您希望稍后将变量重新分配给其他类型的列表,则无法编译器的类型检查器需要ArrayList。