容器中的Java upcasting [重复]

问题描述 投票:0回答:1

我有两个班级父母和孩子,孩子延伸父母。

Parent parent = new Child();

按预期工作,但当对象在这样的容器中时会发生混淆。

Vector<Parent> vp = new Vector<Child>();

这给出了错误:

incompatible types: Vector<Child> cannot be converted to Vector<Parent>

所以我的问题是容器是否阻止了我们这样做时发生的隐式类型转换

parent = new Child();
java class types containers covariance
1个回答
0
投票

看起来你期望给定ChildParent子类,Vector<Child>Vector<Parent>的子类。这种行为称为covariance(事情各不相同),并不是Java的泛型集合中的工作方式。在Java中,Vector<Child>Vector<Parent>没有关系(他们有invariant关系)。

这里有更详细的解释:Covariance, Invariance and Contravariance explained in plain English?

© www.soinside.com 2019 - 2024. All rights reserved.