这个问题在这里已有答案:
我有两个班级父母和孩子,孩子延伸父母。
Parent parent = new Child();
按预期工作,但当对象在这样的容器中时会发生混淆。
Vector<Parent> vp = new Vector<Child>();
这给出了错误:
incompatible types: Vector<Child> cannot be converted to Vector<Parent>
所以我的问题是容器是否阻止了我们这样做时发生的隐式类型转换
parent = new Child();
看起来你期望给定Child
的Parent
子类,Vector<Child>
是Vector<Parent>
的子类。这种行为称为covariance
(事情各不相同),并不是Java的泛型集合中的工作方式。在Java中,Vector<Child>
和Vector<Parent>
没有关系(他们有invariant
关系)。
这里有更详细的解释:Covariance, Invariance and Contravariance explained in plain English?