在Java中的派生类中执行构造函数的顺序

时间:2014-09-19 23:51:39

标签: java constructor

我在java中派生了一个类。 我注意到在执行派生类构造函数中的代码之前调用了超类构造函数。 有没有办法颠倒那个顺序?

示例:

class Animal
{

  public Animal()
  {
    //do stuff
  }
}

class Cat extends Animal
{
  int var;
  public Cat(int v)
  {
    var = v;
    super();
  }
}

这就是我想要做的,但是调用super()会产生错误......

3 个答案:

答案 0 :(得分:2)

不,没有办法颠倒那个顺序。如果显式调用父类构造函数,则需要在构造函数的顶部执行此操作。稍后调用它将允许子类在构建之前访问父类的数据。

答案 1 :(得分:2)

不,你不能以这种方式反转构造函数调用的顺序。对super()的调用必须是构造函数中的第一个语句。如果没有这样的调用,Java会将super()的隐式调用作为第一个语句插入。

JLS, Section 8.8.7,声明:

  

构造函数体的第一个语句可能是对同一个类或直接超类(§8.8.7.1)的另一个构造函数的显式调用。

ConstructorBody:
{ [ExplicitConstructorInvocation] [BlockStatements] }

答案 2 :(得分:1)

没有办法在超类构造函数之前调用运行子类构造函数。这基本上就像在创建超类之前尝试创建子类一样,这是不可能的,因为子类依赖于超类属性来创建。