为什么当我说新的House("x")时会调用超类构造函数Building()?

Sul*_*972 1 java oop inheritance

我有以下代码,但我不明白为什么当我运行它打印"b"前打印"h hn x".为什么"b"获得,因为在所有我不是父类印刷Building在所有当我执行House().

class Building {
    Building() {
        System.out.print("b ");
    }

    Building(String name) {
        this();
        System.out.println("bn " + name);
    }
}

public class House extends Building {
    House() {
        System.out.println("h ");
    }

    House(String name) {
        this();
        System.out.println("hn " + name);
    }

    public static void main(String[] args) {
        new House("x ");
    }
}
Run Code Online (Sandbox Code Playgroud)

Kon*_*Kon 5

超类的零参数构造函数由其子类的构造函数自动隐式调用.

更一般地说,为

class B extends A
Run Code Online (Sandbox Code Playgroud)

构造函数

public B()
{
    //Your code
}
Run Code Online (Sandbox Code Playgroud)

其实看起来像

public B()
{
    super(); //Call the superclass constructor
    //Your code
}
Run Code Online (Sandbox Code Playgroud)

您可以通过显式调用其他一些超类构造函数来覆盖此行为.请注意,如果无法对构造函数进行隐式调用(如果您的no-arg构造函数不存在),那么您将看到错误.