super()
可以调用父类的构造方法。但此时,必须将 super()
写在子类构造方法的第一行,其语法形式如下。
super( [参数列表] )
例如下面的程序中的 super(name)
,就表示调用了父类 Vehicle
中有一个 String
参数的构造方法。
public class Car extends Vehicle {
private String brand = "红旗";
public Car(String name, String brand) {
super(name); //使用super关键字,调用父类的构造方法
this.brand = brand;
}
...
}
需要注意的是,子类的构造方法中如果不写 super()
,编译器会帮助你在子类构造方法的第一行加上super()
,因为在子类中调用父类构造器是“必须的”。但如果父类中只存在有参构造方法,并没有提供无参构造方法,则需要在子类构造方法中显式地调用父类存在的构造器。
简言之,子类构造方法中调用父类构造方法是“必须的”,如果程序员显式进行了调用,则编译器不提供额外帮助,如果程序员未通过 super()
来调用,编译器就会帮助你插入super()
,这时可能因为父类中没有无参构造器而得到一个编译错误。