当子类调用无参构造函数时,该子类的无参构造函数在第一句默认调用了父类的无参构造函数,即下面两端代码是等价的
public class Child extends Parent {
Child() {
}
}
public class Child extends Parent {
Child() {
super();
}
}
所以,如果子类拥有无参的构造函数,父类一定要有一个无参的构造函数,或者在子类的无参构造函数中第一句调用父类的其他构造函数。
下面的子类的构造方法会报错,因为子类中有无参的构造方法,而父类中没有无参的构造方法,当调用子类的无参构造方法时,系统会默认先调用父类的无参构造方法,而此时系统找不到父类的无参构造构造方法,所以会报错
public class Parent {
Parent(String name) {
}
}
public class Child extends Parent {
Child() {
}
}
解决方法1:给父类添加一个无参的构造方法
<span style="font-size:18px;">public class Parent {
Parent() {
}
//此处,父类也可以不用显式声明无参构造方法
}</span>
<span style="font-size:18px;">public class Child extends Parent {
Child() {
}
}</span>
解决方法2:在子类的无参构造方法中显式调用父类中的有参构造方法
public class Parent {
Parent(String name) {
}
}
public class Child extends Parent {
Child() {
super("name");
}
}
最后再说一句,子类不会继承父类的构造方法,更没有子类重写父类的构造方法一说。子类和父类的名称不同,而方法重写需要方法名相同,显然,这一点就已经否决了子类可以重写父类的构造方法的说法