【问题标题】:Java upcasting in container [duplicate]容器中的Java向上转换[重复]
【发布时间】:2025-12-28 08:15:11
【问题描述】:

我有两个类 parent 和 child 和 child 扩展 parent。

Parent parent = new Child();

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

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

这给出了错误:

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

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

parent = new Child();

【问题讨论】:

  • 值得一读:12

标签: java class types containers covariance


【解决方案1】:

您似乎期望给定Parent 的子类ChildVector&lt;Child&gt;Vector&lt;Parent&gt; 的子类。这种行为称为covariance(事情会有所不同),这不是Java 通用集合中的工作方式。在 Java 中,Vector&lt;Child&gt;Vector&lt;Parent&gt; 不相关(它们有 invariant 关系)。

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

【讨论】: