在查看答案之前,先猜测一下正确答案吧!
package com.company;
class ParentClass {
public ParentClass() {
System.out.println("父类无参构造代码块 ");
}
public ParentClass(String name) {
System.out.println("父类有参构造代码块 " + name);
}
{
System.out.println("父类构造代码块 ");
}
static {
System.out.println("父类静态代码块 ");
}
}
public class SubClass extends ParentClass {
public SubClass() {
System.out.println("子类无参构造代码块 ");
}
public SubClass(String name) {
System.out.println("子类有参构造代码块 " + name);
}
{
System.out.println("子类构造代码块");
}
static {
System.out.println("子类静态代码块");
}
public static void main(String[] args) {
System.out.println("-------main start-------");
ParentClass subClass1 = new SubClass();
System.out.println("---------------------");
ParentClass subClass2 = new SubClass("李四");
System.out.println("-------main end-------");
}
}
答案的结果为:
父类静态代码块
子类静态代码块
-------main start-------
父类构造代码块
父类无参构造代码块
子类构造代码块
子类无参构造代码块
---------------------
父类构造代码块
父类无参构造代码块
子类构造代码块
子类有参构造代码块 李四
-------main end-------
总结一下三篇文章得出的顺序:
父类普通static块->子类普通static块->父类构造代码块->父类无参构造方法->子类构造代码块->子类构造方法