提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
本篇内容主要介绍当使用继承时,父类子类相应的调用过程
一、代码块
父类:
public class Animals {
private String name;
Animals() {
System.out.println("我是父类的无参调用方法");
}
Animals(String name) {
this.name = name;
System.out.println("我是父类的带参构造方法");
}
static {
System.out.println("我是父类静态代码块");
}
}
子类代码:
public class Cat extends Animals {
private String name;
Cat() {
System.out.println("我是子类的无参调用方法");
}
Cat(String name) {
this.name = name;
System.out.println("我是子类的带参构造方法");
}
static {
System.out.println("我是子类静态代码块");
}
}
测试类代码一(子类通过无参构造方法构造)
public class Main {
public static void main(String[] args) {
Cat cat = new Cat();
}
}
执行结果:
可见执行过程是:调用父类静态代码块->调用子类静态代码块->调用父类无参构造方法->调用子类无参构造方法
测试类代码二(子类通过有参构造方法构造)
public class Main {
public static void main(String[] args) {
Cat cat = new Cat("小猫");
}
}
执行结果:
执行过程为:调用父类静态代码块->调用子类静态代码块->调用父类无参构造方法->调用子类有参构造方法
总结
由此可见当我们使用继承时,子类实例化对象,首先会调到父类,父类被引入即执行静态代码块,然后就引入子类,执行子类静态代码块,接着调用父类实例化对象,此时执行父类构造方法,再调用子类构造方法补充未构造完的数据。