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