作为一个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
答案 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)
List
是interface
,无法实例化接口。
它用于实现多态性。即接口类型的引用可以保存implements
它的任何类的对象。
List<Object> zzz = new ArrayList<Object>();
它的工作原理,导致ArrayList实现List。