Java List vs ArrayList

时间:2012-02-16 09:59:05

标签: java generics

作为一个C ++的老朋友,我已经设法解决了我的问题,但我不能在这里围绕底层的Java机制:

Vector<Object> x = new Vector<Object>();        // OK
ArrayList<Object> y = new ArrayList<Object>();  // OK
List<Object> zzz = new ArrayList<Object>();     // OK solves problem below but question remains
List<Object> z = new List<Object>();            // WHY? Compiler error: Cannot instantiate 

7 个答案:

答案 0 :(得分:15)

List是一个接口,有点像C ++中有一些= 0方法的类。你无法实例化它。

但是ArrayList<T>“继承”List<T>(或者用Java术语来实现它),所以那些引用是赋值兼容的。

答案 1 :(得分:5)

List是一个接口,你不能初始化它。 ArrayList实施List,因此您可以将ArrayList个实例分配给List变量。

答案 2 :(得分:2)

是。 因为List是一个接口而在Java中,所以无法实例化接口。 您只能实例化一个类。

ArrayList是一个实现List&lt;&gt;的类。这就是你可以实例化它的原因。 :)

答案 3 :(得分:1)

List不是类,它是一个接口,你无法实例化接口对象。

ArrayList是实现List接口的类,因此能够实例化ArrayList对象并分配给List对象

答案 4 :(得分:1)

List是一个界面。您无法使用new运算符在接口实例中创建。这就是行List<Object> z = new List<Object>();给出错误的原因。只能实例化类。

答案 5 :(得分:1)

“接口”就像一个对象必须遵守的协议。

答案 6 :(得分:0)

Listinterface,无法实例化接口。

它用于实现多态性。即接口类型的引用可以保存implements它的任何类的对象。

List<Object> zzz = new ArrayList<Object>();

它的工作原理,导致ArrayList实现List。