Reason of Type mismatch Error : convert ArrayList<SubClass1> to List<SuperClass>?

Reason of Type mismatch Error : convert ArrayList<SubClass1> to List<SuperClass>?

Class B extends class A.We 可以用这个语句:

A a = new B();

但是为什么我们不能使用这个代码:

List<A> listOfA = new ArrayList<B>();

当然,我们可以使用generics to avoid that error。但我的问题是关于出现该错误的原因。

如果你能做到这一点,你就可以写

listOfA.add(new A());

A 类型的对象插入 ArrayList<B>

试试这个

List<? extends A> listOfA = new ArrayList<B>();

这里的规则很简单。ListArrayList 的超类型(或接口)。因此您可以安全地将 ArrayList 引用分配给 List variable.But 这是针对非泛型类型的。List & ArrayList 就像模板,如果你以泛型方式创建它,变量声明的类型必须与你传递给实际对象的类型相匹配type.It 是泛型类型安全,所以你知道(从编译器的角度)你可以对该列表中的每个对象进行类型安全操作。

对我来说,原因是 java 开发人员不想重复他们在数组中犯的错误。例如,

 Object x[] = new String[3];
 x[0] = new Integer(0);

此代码给出运行时异常java.lang.ArrayStoreException

Source