我的程序
class Building {
Building() {
System.out.print("b ");
}
Building(String name) {
this();
System.out.print("bn " + name);
}
};
public class House extends Building {
House() {
System.out.print("h "); // this is line# 1
}
House(String name) {
this(); // This is line#2
System.out.print("hn " + name);
}
public static void main(String[] args) {
new House("x ");
}
}
我们知道编译器会super()
在子类的构造函数的第一行写一个调用。因此输出不应该是:
b
(从编译器调用 super(),在第 2 行之前
b
(再次从编译器对 super() 的书面调用,在第 1 行之前)
h hn x
但输出是
b h hn x
这是为什么?