class SuperClass {
private int n;
SuperClass(){ //父类的无参构造器
System.out.println("SuperClass()");
}
SuperClass(int n) { //父类的带参构造器
System.out.println("SuperClass(int n)");
this.n = n;
}
}
class SubClass extends SuperClass{
private int n;
SubClass(){ //子类的无参构造器
super(300);//调用父类的带参构造器,super(300)相当于SuperClass(300)
System.out.println("SubClass");
}
public SubClass(int n){ //子类的带参构造器
System.out.println("SubClass(int n):"+n);
this.n = n;
}
}
public class TestSuperSub{
public static void main (String args[]){
SubClass sc = new SubClass();
SubClass sc2 = new SubClass(200);
}
}
这个实例的输出结果是:
SuperClass(int n)
SubClass
SuperClass()
SubClass(int n):200
从这个实例得到的结果是(个人见解):子类在构造时,会根据主函数中是否传入参数来选择使用无参构造器 or带参构造器,在这个实例中:
当子类调用的是无参构造器时,若父类的构造器是带有参数的,则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适当的参数列表。
当子类调用的是带参构造器时,则在子类的构造器中用super调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器。