声明List l = new ArrayList()和ArrayList al = new ArrayList()
之间有什么区别答案 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)
List
是Interface
(超类型的ArrayList,LinkedList)。
当你坐下List l = new ArrayList();
时
您正在使用超类引用创建子类对象,因此您只能访问超类的方法,但是在重写方法的情况下,将调用子类方法。
在你的情况下:
List l = new ArrayList()
您只能调用list interface中声明的方法和字段。
ArrayList al = new ArrayList()
您将能够从列表和arraylist中调用方法和字段。
当你使用方法1
创建一个arraylist时也是如此List l = new ArrayList();
稍后您可以使用相同的引用来创建像
这样的LinkedListl = 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。