【发布时间】:2011-11-22 11:34:39
【问题描述】:
public class ParentClass
{
public ParentClass(int param);
}
public class MyClass extends ParentClass
{
private int _a;
private int _b;
private int _c;
public MyClass(String input)
{
_a=CalculateA(input);
_b=CalculateB(_a);
_c=CalculateC(_a);
super(_b+_c);
}
//a expensive procedure
private int CalculateA(String text);
private int CalculateB(int a);
private int CalculateC(int a);
}
Java 不允许链式构造函数是放在构造函数中的第一个方法以外的任何东西。 链式构造函数不能将非静态方法作为参数调用(这消除了使用返回初始化值的 Initialsers 的可能性)。
如何使用合法的Java实现上述代码?
【问题讨论】:
-
有什么问题?并且构造函数绝对可以调用非静态方法。
-
"构造函数也不能调用非静态方法。"那对我来说是个新闻。我很确定我在构造函数中使用了大量方法。
-
那么问题是什么?目前你已经发表了声明。
-
param是父类私有的吗?它必须是吗?如果没有,您可以调用super(-1);(或另一个虚拟值),在子类构造函数中进行计算,然后分配param = _b+_c;。 -
param 实际上是构造函数的参数,它根本不存储在父类中。 (除了在构造函数中的本地)
标签: java inheritance constructor