1、创建一个Father类,如下:
public class Father {
{
System.out.println("父类的普通代码块1");
}
static {
System.out.println("父类的static代码块1");
}
public String name;
public int age;
public Father() {
System.out.println("调用父类的空参构造");
}
public Father(String name, int age) {
this.name = name;
this.age = age;
System.out.println("调用父类的有参构造");
}
static {
System.out.println("父类的static代码块2");
}
{
System.out.println("父类的普通代码块2");
}
public void doWork() {
System.out.println("父类做事");
}
}
2、创建一个Son类,继承Father类,并重写其中的方法:
public class Son extends Father {
{
System.out.println("子类的普通代码块2");
}
static {
System.out.println("子类的static代码块1");
}
public Son() {
System.out.println("调用子类的空参构造");
}
public Son(String name, int age) {
this.name = name;
this.age = age;
System.out.println("调用子类的有参构造");
}
static {
System.out.println("子类的static代码块2");
}
{
System.out.println("子类的普通代码块2");
}
@Override
public void doWork() {
System.out.println("子类做事");
}
}
3、创建Test类,测试:
public class Test {
public static void main(String[] args) {
Son son = new Son();
son.doWork();
new Son("aa", 10);
}
}
结果如下
4、修改子类的有参构造
public class Son extends Father {
{
System.out.println("子类的普通代码块2");
}
static {
System.out.println("子类的static代码块1");
}
public Son() {
System.out.println("调用子类的空参构造");
}
public Son(String name, int age) {
super(name, age);
this.name = name;
this.age = age;
System.out.println("调用子类的有参构造");
}
static {
System.out.println("子类的static代码块2");
}
{
System.out.println("子类的普通代码块2");
}
@Override
public void doWork() {
System.out.println("子类做事");
}
}
结果如下
由以上代码可以看出,java类中资源的加载顺序为:父类静态代码块 → 本身静态代码块 → 父类普通代码块 → 父类的构造方法 → 本身普通代码块 → 本身的构造方法。
注意: 如果不显式声明,子类调用构造方法时默认都会调用父类的空参构造,区别请看两个测试结果的输出,Son类调用有参构造时输出了父类空参构造中的输出语句,而显式声明了父类的有参构造后,输出了父类有参构造中的输出语句。
以上属于个人见解,如有错误,欢迎指正!