是否可以不在孩子的第一行调用父类的构造函数?
我想构建类似这样的东西(请参阅构造函数B)。
class A
{
public A () {}
public A (int x) { // do something }
}
class B extends A
{
public B (int y)
{
if (y > 0) { super (y); }
}
}
我认为在存在默认构造函数的情况下,它会自动被调用。没有它,就需要在B()的第一行调用super。
是否可以在第一行之后调用另一个构造函数(带有参数)?或者效果相同?
答案 0 :(得分:2)
不可能。 super()
必须始终是孩子构造函数的第一条语句。请参阅有关原因的更多详细信息:Why do this() and super() have to be the first statement in a constructor?
答案 1 :(得分:1)
对超类构造函数的调用必须是 子类构造函数。
https://docs.oracle.com/javase/tutorial/java/IandI/super.html
答案 2 :(得分:1)
对于此类问题,存在JAVADOC: https://docs.oracle.com/javase/tutorial/java/IandI/super.html
并且有很好的解释。
您想要实现的逻辑可以用不同的方式完成
class A
{
public A () {}
public A (int x) {
doSomething(x);
}
protected doSomething(int x){// do something}
}
class B extends A
{
public B (int y)
{
if(y > 0){
doSomething(y);
}
}
}