this()和super()调用构造器的区别
上篇文章,使用this()调用本类中的构造器,今天接着写super()调用父类的构造器。
super()调用父构造器的用法
- 必须要在子类构造器执行体的第一行
- this调用和super调用不会再同一个构造器的执行体内同时出现
爷爷-父亲-孙子构造器的执行流程
public class grandfather {
public grandfather(){ // 爷爷类默认构造器
System.out.println("我是爷爷");
}
}
public class father extends grandfather {
private String name;
private int age;
public father(){ // 爸爸类默认构造器
System.out.println("我是爸爸默认的构造函数");
}
public father(String name){ // 爸爸类带name构造器
this.name=name;
System.out.println("我是爸爸中的有name参数构造函数");
}
public father(String name,int age){ //爸爸类带name和age的构造类
this(name);
System.out.println("我是爸爸中带name和age的构造器");
}
}
public class son extends father {
public son(){ // 孙子类,默认的无参的构造类
super("小孩",10);
System.out.println("我是孙子默认的无参构造函数");
}
public static void main(String arg[]){
son child=new son();
}
}
打印结果:我是爷爷
我是爸爸中的有name参数构造函数
我是爸爸中带name和age的构造器
我是孙子默认的无参构造函数
总结:
- 创建对象时总是从此类继承的父类的父类的父(继承树树顶端)的默认构造器开始向下执行,最后在执行此类的构造器。
- 此类中使用super()会根据super()中的参数列表,调用父类中相对应的构造器。