When是子类继承的构造函数


public class A {
public A() {
System.out.println("A");
}
}
public class B extends A{
public B() {
System.out.println("B");
}
}
public static void main(String[] args){
B b1 = new B();

输出:

A
B

让我困惑的是,Java的继承文档说:

构造函数不是成员,所以它们不能被子类继承;类中调用超类的构造函数子类。

根据我的理解,除非你在B类的构造函数中特别调用super(),否则它不应该打印A

那么问题是,为什么打印A?

编译器首先从子类的构造函数调用父类的默认构造函数(无参数构造函数)。所以你不需要显式调用它。这就是为什么上面会打印这一行。

如果你想调用超类的非默认构造函数(带参数的构造函数),那么你必须从子类中显式调用它。

最新更新