我有下一个
public interface MyInterface{}
public class ClassA implements MyInterface(){}
public class ClassB extends ClassA{}
理论上,对象B的有效引用类型如下:
MyInterface myIn = new ClassB();
ClassA o1 = new ClassB();
ClassB o2 = new ClassB();
Object o3 = new ClassB();
如果我尝试做这样的事......
List<MyInterface> o1 = new ArrayList<ClassB>();
我得到了一个compilance错误。 有什么想法吗?
答案 0 :(得分:1)
ArrayList<ClassB>
只能包含ClassB
的实例或ClassB
的子类。
另一方面,List<MyInterface>
也可以包含ClassA
的实例(不一定是ClassB
的实例)以及实现MyInterface
的任何其他实例。< / p>
因此,您无法将ArrayList<ClassB>
分配给List<MyInterface>
变量。
如果您希望o1
列表包含任何MyInterface
个实例,则应为其分配ArrayList<MyInterface>
。
如果您希望o1
仅包含ClassB
的实例,请将其类型更改为List<ClassB>
。