Java多态性相互映射子类型

时间:2013-02-20 18:35:16

标签: java arrays polymorphism subtype

我知道Java是静态语言,在数组方面有动态检查: 但我无法理解为什么会发生这种情况,有人可以在以下两种情况下向我解释这个例子:A []是B []的子类型,还是B []是A []的子类型?哪个会失败,为什么?

f(A[] as) {
  as[0] = new A(); // **?!**
}

B[] bs = new B[10];
f(bs); // **?!**
B b = bs[0]; // **?!**

1 个答案:

答案 0 :(得分:2)

Java中的数组是covariant

这意味着如果BA的子类型,那么B[]也是A[]的子类型。因此,您可以传递一个B[] A[],其中B可以传递A,预计会 B b = (B) new A(); //bypasses the compiler but fails at runtime B[] bs = (B[]) new A[1]; //also bypasses the compiler but fails at runtime

但如果你采取相反的方式,那么你需要一个明确的演员,如 -

{{1}}