我有以下代码,但我不明白为什么我在运行此代码时先打印"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 ");
    }
}

最佳答案

在继承中,必须首先初始化超类中存在的所有字段,因为这些字段将在子类中使用,为此,在构造子类超类构造函数之前,应先对其进行初始化以初始化超类中存在的所有字段。

构造子类实例时调用的超类构造函数。在您的代码中,您正在创建new House("x ");House实例。

此时将调用House参数化的构造函数House(String name),您的超类隐式构造函数将被调用。

关于java - 为什么说new House(“x”)时调用父类(super class)构造函数Building()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28325816/

10-13 04:34