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 ");
}
House(String name){
this();
System.out.print("hn "+name);
}
public static void main(String[] args){
new House("x ");
}
}
我认为输出必须是 b bn h hn x .但是输出是 b h hn x .
我很困惑。这个输出是怎么来的。帮我
最佳答案
您可能正在考虑对 super()
的隐式调用Java 插入到构造函数中。但请记住,Java 仅在需要时才这样做——也就是说,当您自己不调用另一个构造函数时。当您调用 this()
单论House
构造函数,您已经在推迟到另一个构造函数,所以 Java 不会插入对 super()
的调用那里。
相反,在零参数构造函数 House()
,您不会通过调用 this(...)
来启动它。或 super(...)
.所以在那一个中,Java 确实插入了 super()
为你。
底线,Java 从不调用 Building(String)
.在对象的初始化过程中只调用了一个父类(super class)构造函数,它是一个没有参数的构造函数。
关于java - 基于 SCJP 程序的怀疑(EXAM 310-065),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3234073/