如果先调用 super class 然后再调用 subclass 会发生什么?
What happens if a call super class first and subclass after?
class A{
public A(){ System.out.println("A constructor"); }
static { System.out.println("A static init block"); }}
class B extends A{
public B(){ System.out.println("B constructor"); }
static { System.out.println("B static init block"); }}
public class Test {
public static void main(String[] args) {
A a = new A();
B b = new B();
}
}
Selected Answer:
A static init block
A constructor
B static init block
A constructor
B constructor
第一部分很明确,Superclass会先执行。 “ B b = new B(); ”部分怎么样?这个子类会转到超类吗?如果是这样,为什么不第二次打印“A static init block”?如果一个子类不去超类,为什么打印“A constructor”?
提前致谢!
静态初始化块在class加载后执行一次。
由于 class A 在实例化 A 时加载,因此在实例化 B 时不再需要加载它。因此静态初始化程序不再 运行。
每次创建 class 的实例时,构造函数都是 运行。由于该实例不仅是其直接 class 的实例,而且还是 superclass 的实例,如果您未在 sub 中显式执行,则隐式调用 superclass 构造函数class 构造函数。因此,每次实例化 class.
时, superclass 构造函数也是 运行
class A{
public A(){ System.out.println("A constructor"); }
static { System.out.println("A static init block"); }}
class B extends A{
public B(){ System.out.println("B constructor"); }
static { System.out.println("B static init block"); }}
public class Test {
public static void main(String[] args) {
A a = new A();
B b = new B();
}
}
Selected Answer:
A static init block
A constructor
B static init block
A constructor
B constructor
第一部分很明确,Superclass会先执行。 “ B b = new B(); ”部分怎么样?这个子类会转到超类吗?如果是这样,为什么不第二次打印“A static init block”?如果一个子类不去超类,为什么打印“A constructor”?
提前致谢!
静态初始化块在class加载后执行一次。 由于 class A 在实例化 A 时加载,因此在实例化 B 时不再需要加载它。因此静态初始化程序不再 运行。
每次创建 class 的实例时,构造函数都是 运行。由于该实例不仅是其直接 class 的实例,而且还是 superclass 的实例,如果您未在 sub 中显式执行,则隐式调用 superclass 构造函数class 构造函数。因此,每次实例化 class.
时, superclass 构造函数也是 运行