Java:为什么我的类会自动从超类继承构造函数?

时间:2014-05-27 22:15:28

标签: java inheritance constructor

当我尝试这个问题底部的代码时,输​​出是:

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 ");
    }
}

1 个答案:

答案 0 :(得分:1)

此行为由JLS(§8.8.7. Constructor Body)强制执行:

  

如果构造函数体不是以显式构造函数调用开始,并且声明的构造函数不是原始类Object的一部分,那么构造函数体隐式地以超类构造函数调用“super();开头。 “,调用其直接超类的构造函数,不带参数。