我有两个班级父母,孩子和孩子延长父母。
Parent parent = new Child();
可以按预期工作,但是当对象在类似的容器中时,这种混乱就会发生。
Vector<Parent> vp = new Vector<Child>();
这给出了错误:
incompatible types: Vector<Child> cannot be converted to Vector<Parent>
所以我的问题是容器是否会阻止我们执行
时发生的隐式打字parent = new Child();
看起来您期望给定Parent
的Child
子类,Vector<Child>
是Vector<Parent>
的子类。此行为称为covariance
(事物变化在一起),这不是Java的通用集合中的工作方式。在Java Vector<Child>
和Vector<Parent>
中没有相关(它们具有invariant
关系)。
这里更详细的解释:以简单的英语解释的协方差,不变性和违反率?