当我尝试这个问题底部的代码时,输出是:
a a b a b c
所以这意味着B和C的构造函数从它们的超类中调用构造函数。但为什么? 我以为那个超级班级'构造函数只有在与super()函数一起使用时才会被调用:
public sportscar(String name, int weight, int topspeed){
super(name, weight);
this.setTopspeed(topspeed);
}
但是如果它从它们扩展的类中自动接管构造函数,为什么我们要使用super()函数?我知道正常的方法会自动扩展到子类,但我认为构造函数是不同的。
如果有人能为我清除这一点,非常感谢!
代码:
public class App {
public static void main(String[] args) {
new A();
new B();
new C();
}
}
public class A {
public A(){
System.out.println("a ");
}
}
public class B extends A {
public B(){
System.out.println("b ");
}
}
public class C extends B {
public C(){
System.out.println("c ");
}
}
答案 0 :(得分:1)
此行为由JLS(§8.8.7. Constructor Body)强制执行:
如果构造函数体不是以显式构造函数调用开始,并且声明的构造函数不是原始类
Object
的一部分,那么构造函数体隐式地以超类构造函数调用“super();
开头。 “,调用其直接超类的构造函数,不带参数。