数组的子类型

时间:2010-09-14 19:52:35

标签: java

如果我有class A {class B extends A {

B[] b = new B[1];
b[0] = new B();
System.out.println(b instanceof A[]);

打印出真或假?

4 个答案:

答案 0 :(得分:14)

JLS states如果B可分配给A,则为是,B []可分配给A []。

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

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];

此代码compiles but fails at runtime。我们称缺乏类型安全性。

答案 1 :(得分:1)

// A.java
public class A {}

// B.java
public class B extends A {}

// Test.java
public class Test {
    public static void main(String[] args) {
        B[] b = new B[1];
        b[0] = new B();
        System.out.println(b instanceof A[]);
    }
}

运行时:

> javac *.java && java Test
true

答案 2 :(得分:0)

它会打印true

答案 3 :(得分:-4)

假。

数组不遵循与普通对象相同的规则。