Java:super()不在第一行吗?

时间:2018-08-07 15:17:12

标签: java oop

是否可以不在孩子的第一行调用父类的构造函数?

我想构建类似这样的东西(请参阅构造函数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。

是否可以在第一行之后调用另一个构造函数(带有参数)?或者效果相同?

3 个答案:

答案 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);
    }
  }
}