写在前面
- 子类构造器的第一行可以使用super显示调用父类构造器
- 如果不使用super,Java会在执行子类构造器之前,隐式调用父类的无参构造器
1.我们先来看不使用super的情况
class Base {
public Base() {
System.out.println("Base Construct");
}
}
public class Sub extends Base {
public Sub() {
System.out.println("Sub Construct");
}
public static void main(String[] args) {
Base base = new Sub();
}
}
Base Construct
Sub Construct
隐式调用了父类构造器。
2.再来看加了super的情况,
class Base {
public Base() {
System.out.println("Base Construct");
}
}
public class Sub extends Base {
public Sub() {
super();
System.out.println("Sub Construct");
}
public static void main(String[] args) {
Base base = new Sub();
}
}
Base Construct
Sub Construct
只会调用一个父类构造器,说明系统不自动调用了。
3.我们加入有参构造器,
class Base {
public Base() {
System.out.println("Base Default Construct");
}
public Base(int x) {
System.out.println("Base Construct");
}
}
public class Sub extends Base {
public Sub(int x) {
System.out.println("Sub Construct");
}
public static void main(String[] args) {
Base base = new Sub(0);
}
}
Base Default Construct
Sub Construct
所以Java只会自动调用父类的无参构造器。