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?
编译器首先从子类的构造函数调用父类的默认构造函数(无参数构造函数)。所以你不需要显式调用它。这就是为什么上面会打印这一行。
如果你想调用超类的非默认构造函数(带参数的构造函数),那么你必须从子类中显式调用它。