子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。如果父类的构造器带有参数,则必须在子类的构造器中显式地通过 super 关键字调用父类的构造器并配以适当的参数列表。
如果父类构造器没有参数,则在子类的构造器中不需要使用 super 关键字调用父类构造器,系统会自动调用父类的无参构造器。
父类
public class FatherClass {
private int num;
FatherClass(){
System.out.println("父类无参构造方法FatherClass()");
}
FatherClass(int num){
System.out.println("父类有参构造方法FatherClass()(int num),num =" + num);
this.num = num;
}
}
子类
public class SonClass extends FatherClass{
SonClass(){
//自动调用父类无参构造方法
}
SonClass(int num){
//调用父类有参构造方法
super(10);
}
}
生成对象测试
/**
* 子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。
* 如果父类的构造器带有参数,则必须在子类的构造器中显式地通过 super 关键字调用父类的构造器并配以适当的参数列表。
* 如果父类构造器没有参数,则在子类的构造器中不需要使用 super 关键字调用父类构造器,系统会自动调用父类的无参构造器。
*/
public class ExtendsTest {
public static void main(String[] args) {
System.out.println("创建父类对象");
FatherClass father1 = new FatherClass();
FatherClass father2 = new FatherClass(2);
System.out.println("创建子类对象");
SonClass son1 = new SonClass();
SonClass son2 = new SonClass(4);
}
}