提问人:Arya_ 提问时间:6/11/2022 最后编辑:Federico klez CullocaArya_ 更新时间:6/11/2022 访问量:89
为什么 super() 没有在另一个构造器中被调用?
Why does super() not get called in the other constuctor?
问:
如果两者都被调用,那么为什么“建筑”不打印两次,而是打印一次?House()
House(name)
class Building {
Building() {
System.out.println("Buiding");
}
Building(String name) {
this();
System.out.println("Building: String Constructor" + name);
}
}
class House extends Building {
House() {
System.out.println("House ");
}
House(String name) {
this();
System.out.println("House: String Constructor" + name);
}
}
public class Test {
public static void main(String[] args) {
new House(" OK");
}
}
输出:
Buiding
House
House: String Constructor OK
答:
2赞
Kristof Neirynck
6/11/2022
#1
House(String name)
调用,这与 相同。 隐式调用,这与 相同。this()
House()
House()
super()
Building()
你从不打电话.Building(String name)
House(String name)
可以打电话来做这件事。super(name)
1赞
Arun Sudhakaran
6/11/2022
#2
下面编译构造函数的基本规则是构造函数的编译形式
- 调用当前类构造函数或超类构造函数。如果它不存在,那么编译器将保留此 .
this(args if any)
super(args if any)
super()
- 调用实例块。
- 在 .java 文件中编写的其余代码
Java 代码
Bean () {
System.out.println("Inside Bean()");
}
编译后
Bean () {
super(); // added by compiler
// call to instance block
System.out.println("Inside Bean()");
}
因此,一旦你遵循了这条规则,那么你就可以理解,从电话中将要去,因为你给了.从第一次调用开始(因为您没有手动给出调用),它只会调用,同样会再次调用,在这种情况下是 Object 类。House(String name)
House()
this()
House()
super()
Building()
super()
评论
House(String)
House()
this()
Building()
super()
Building
this()
House(String)
super()
House()
super()