我在java中派生了一个类。 我注意到在执行派生类构造函数中的代码之前调用了超类构造函数。 有没有办法颠倒那个顺序?
示例:
class Animal
{
public Animal()
{
//do stuff
}
}
class Cat extends Animal
{
int var;
public Cat(int v)
{
var = v;
super();
}
}
这就是我想要做的,但是调用super()会产生错误......
答案 0 :(得分:2)
不,没有办法颠倒那个顺序。如果显式调用父类构造函数,则需要在构造函数的顶部执行此操作。稍后调用它将允许子类在构建之前访问父类的数据。
答案 1 :(得分:2)
不,你不能以这种方式反转构造函数调用的顺序。对super()
的调用必须是构造函数中的第一个语句。如果没有这样的调用,Java会将super()
的隐式调用作为第一个语句插入。
构造函数体的第一个语句可能是对同一个类或直接超类(§8.8.7.1)的另一个构造函数的显式调用。
ConstructorBody:
{ [ExplicitConstructorInvocation] [BlockStatements] }
答案 2 :(得分:1)
没有办法在超类构造函数之前调用运行子类构造函数。这基本上就像在创建超类之前尝试创建子类一样,这是不可能的,因为子类依赖于超类属性来创建。