Java多态性数组相互关联子类型

Java多态性数组相互关联子类型,java,arrays,polymorphism,subtype,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]; // **?!** Java中的数组是 这意味着如果B是a的子类型,那么B[]也是a[]的子类型。因此,您可以在需要

我知道Java是静态语言,在数组方面有动态检查:
但我不明白为什么会发生这种情况,有人能给我解释一下这两种情况下的例子吗:A[]是B[]的子类型,或者B[]是A[]的子类型?哪个会失败,为什么

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

B[] bs = new B[10];
f(bs); // **?!**
B b = bs[0]; // **?!**
Java中的数组是

这意味着如果
B
a
的子类型,那么
B[]
也是
a[]
的子类型。因此,您可以在需要
a[]
的地方传递a
B[]
,就像在需要
a
的地方传递a
B
一样

但如果你走相反的路,那么你需要一个明确的演员阵容,比如——

 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

使用编译器试试。你得到的输出是什么,你期望的输出是什么?“但我不明白为什么会发生这种情况”。。。会发生什么?我可以使用编译器,但我想知道为什么?了解更多关于语言动态方面的知识。