【发布时间】:2015-08-02 19:05:04
【问题描述】:
我知道构造函数中的第一条语句必须是 super()(或 this()),如果没有明确指定,编译器会为我们插入它。考虑到这一点,请参阅以下代码:
class Building {
Building() { System.out.print("b "); }
Building(String name) {
}
}
public class House extends Building {
House() { System.out.print("h "); }
House(String name) {
this(); System.out.print("hn " + name);
}
public static void main(String[] args) { new House("x "); }
}
在 main 方法中,我调用了 House 类的重载构造函数,该构造函数接受一个 String 参数。由于 this() 已经被调用,这意味着 super() 被隐式调用。但是 Building(String name) 构造函数会发生什么?不是也得叫吗?我知道这段代码可以工作并产生b h hn x,但不需要调用超类的匹配构造函数吗?
【问题讨论】:
-
但不匹配构造函数:您假设基类中的构造函数通过参数与子类构造函数匹配,
House(String)会自动调用Building(String)? (提示:事实并非如此)。
标签: java constructor