继承的构造
首先, 类初始化时,继承链上(包括当前类)的全部静态代码块最 先执行一次.之后不再执行,除非程序又重启.(按链序和声明序且仅1次)
其次,创建子类实例时,会先进行父类的构造(要么显式进行, 要么隐式用super()进行)
最后,类的构造顺序:构造代码块(按声明序)→构造方法
总体:父类静态块→子类静态块→父类构造块→父类构造子→ 子类构造块→子类构造子
class C {
static {
System.out.println("C父类静态块");
}
}
class A extends C {
static {
System.out.println("父类静态块1");
}
{
System.out.println("父类构造块1");
}
public A() {
System.out.println("父类无参构造子");
}
public A(int i) {
System.out.println("父类带参构造子");
}
{
System.out.println("父类构造块2");
}
static {
System.out.println("父类静态块2");
}
}
public class B extends A {
B() {}
B(int i){
super(i+1);
System.out.println(i);
}
public static void main(String[] args) {
new B();
System.out.println("----------------");
new B(1);
}
static {
System.out.println("子类静态块");
}
{
System.out.println("子类构造块");
}
}
结果:
C父类静态块
父类静态块1
父类静态块2
子类静态块
父类构造块1
父类构造块2
父类无参构造子
子类构造块
----------------
父类构造块1
父类构造块2
父类带参构造子
子类构造块
1