数组的子类型

Leo*_*zen -8 java

如果我拥有class A {class B extends A {愿意

B[] b = new B[1];
b[0] = new B();
System.out.println(b instanceof A[]);
Run Code Online (Sandbox Code Playgroud)

打印出真或假?

Mar*_*ers 15

所述JLS指出,如果B是分配给A,然后是,B []被分配给一个[].

这打开了严重影响的大门,但是这个代码证明了这一点:

class A {}
class B extends A {}
class C extends A {}

//...
B[] bs = new B[2];
A[] as = bs;
as[0] = new C(); //runtime error
B b = bs[0];
Run Code Online (Sandbox Code Playgroud)

此代码编译但在运行时失败.我们称缺乏类型安全性.