与List和arrayList的多态性

时间:2017-05-29 10:40:33

标签: java generics polymorphism

我有下一个

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错误。 有什么想法吗?

1 个答案:

答案 0 :(得分:1)

ArrayList<ClassB>只能包含ClassB的实例或ClassB的子类。

另一方面,List<MyInterface>也可以包含ClassA的实例(不一定是ClassB的实例)以及实现MyInterface的任何其他实例。< / p>

因此,您无法将ArrayList<ClassB>分配给List<MyInterface>变量。

如果您希望o1列表包含任何MyInterface个实例,则应为其分配ArrayList<MyInterface>

如果您希望o1仅包含ClassB的实例,请将其类型更改为List<ClassB>