2014-09-19 52 views
0

我在java中派生了一个类。 我注意到,超类构造函数在派生类构造函数中的代码执行之前被调用。 有没有反转该顺序的方法?构造函数在Java派生类中执行的顺序

例子:

class Animal 
{ 

    public Animal() 
    { 
    //do stuff 
    } 
} 

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

这是我想做些什么,但调用超()一样,给出了一个错误......

+0

不,这是不可能的(至少在java中) – afzalex 2014-09-19 23:53:39

+1

这个问题可以通过阅读Java语言参考来回答。 – 2014-09-20 00:06:49

+0

为什么这个问题投下来了? – 2014-09-20 00:07:07

回答

2

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

2

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

JLS, Section 8.8.7,指出:

一个构造体的第一个语句可以是同一个类的另一个构造的明确调用或直接超类的(§8.8.7.1)。

ConstructorBody: 
{ [ExplicitConstructorInvocation] [BlockStatements] } 
1

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

相关问题