必须满足以下四条规则:
- 子类的构造过程中必须调用父类的构造方法
- 子类可以在自己的构造方法中用super调用父类的构造方法,并且必须放在子类构造方法的第一行。 如果用this则调用本类的其它构造方法。
- 如果子类的构造方法没有显示的调用父类的构造方法,系统默认调用无参数的构造方法。
- 如果子类中既没有显示调用父类的构造方法,父类中也不存在无参数的构造方法,则无法编译通过。
例子:
class FatherClass {
private int n;
FatherClass() {
System.out.println("FatherClass");
}
FatherClass(int n) {
System.out.println("FatherClass" + n);
this.n = n;
}
}
class ChileClass extends FatherClass {
private int n;
ChileClass(int n) {
// 如果注释了super()已经父类的无参数构造方法则报错
// super()不放首行也报错
super();
System.out.println("ChileClass" + n);
this.n = n;
}
ChileClass() {
super(300);
System.out.println("ChileClass");
}
}
public class SubSuper {
public static void main(String[] args) {
ChileClass sc1 = new ChileClass();
ChileClass sc2 = new ChileClass(400);
}
}
输出结果:
FatherClass300
ChileClass
FatherClass
ChileClass400