class a{
a(int age){}
}
class b extends a{}
public class HelloWorld {
public static void main(String[] args) {
b var1=new b();
System.out.println("Try programiz.pro");
}
}
上面的代码不起作用。如果我在子类构造函数中包含语句 super(10),它就起作用。
但是 a 中没有任何构造函数,它的工作原理如下
class a{}
class b extends a{}
public class HelloWorld {
public static void main(String[] args) {
b var1=new b();
System.out.println("Try programiz.pro");
}
}
如果那是因为我们需要在第二段代码中提供超类的默认构造函数,我们没有指定构造函数,但它仍然有效。你能解释一下为什么吗?
子类构造函数中的第一行必须是超类构造函数的调用。如果子类构造函数没有显式调用超类构造函数,Java 编译器会自动包含对超类的零参数构造函数的调用。如果没有这样的构造函数,则会导致编译时错误。这正是您所描述的以及您的示例中的代码所发生的情况。
阅读 this 了解有关
super()
和子类构造函数的更多信息。