正确代码解释如下:
class My {
public static void main(String[] args) {
Father father = new Father("tom");
Son son = new Son();
father.show();
son.print();
}
}
class Father {
String name;
Father() {}
Father(String name) {
this.name = name;
System.out.println("father 构造");
}
public void show() {
System.out.println("father");
}
}
class Son extends Father {
String name = "tom1";
Son(){
//因为这里有一个默认的super()调用父类的无参构造函数,而你的父类没有,所以报错
//或手动写上调用父类有参构造方法 super("..");错误就会消失
System.out.println("son 构造");
}
public void print() {
System.out.println("son");
}
}
子类所有的构造函数,默认都会访问父类中空参数的构造函数。
因为子类每一个构造函数内部的第一行都有一句隐式super()
当父类中没有空参数的构造函数时,子类必须手动通过super或this语句来指定
要访问的构造函数。
当然,子类构造函数第一行也可以手动指定this语句来访问本类中的构造函数。
子类中至少会有一个构造函数会访问父类中的构造函数。
class Test10 {
public static void main(String[] args) {
Father father = new Father("tom");
Son son = new Son();
father.show();
son.print();