京东的一道java面试题,类A和类B的代码如下,问题:A a = new B(); 输出结果及正确的顺序?
//A.java
public class A {
static {
System.out.println("A init");
}
public A() {
System.out.println("A Instance");
}
}
//B.java
public class B extends A {
static {
System.out.println("B init");
}
public B() {
System.out.println("B Instance");
}
}
//C.java
public class C {
public static void main(String[] args) {
A a = new B();
}
}
筒子们要想知道这个题的答案,只需要动动手指,在IDE里运行一下就会知道答案如下
A init
B init
A Instance
B Instance
网上很容易找到的解释如下
父类静态初始化在子类静态初始化之前,父类构造方法在子类构造方法之前运行
上面的结果页印证了这个结论,A init 在 B init 之前,说明父类静态初始化在子类静态初始化之前,A Instance 在 B Instance 之前,说明创建子类实例对象时,父类构造器方法会比子类构造器方法先执行。
让我再问几个问题