赫雷什一些示例代码,问题的实例变量初始化
class Base
{
private int val;
Base() {
val = lookup();
}
public int lookup() {
//Perform some lookup
// int num = someLookup();
return 5;
}
public int value() {
return val;
}
}
class Derived extends Base
{
private int num = 10;
public int lookup() {
return num;
}
}
class Test
{
public static void main(String args[]) {
Derived d = new Derived();
System.out.println("d.value() returns " + d.value());
}
}
输出:d.value()返回0 //我预期10查找()被重写,但不是0!有人可以澄清这一点?
Derived
的实例变量的初始化在其查找方法执行时未发生。如何确保在调用其方法时初始化实例变量Derived
?
'value()'仅在Base中定义,并返回仅在Base中定义的'val',在Base构造函数中由'5'初始化。 'lookup'是从Base构造函数调用的,这意味着重载不起作用,因为Derived类尚未完全构建。您还期望从代码中得到什么? – ULysses 2010-07-20 09:36:11
@ULysses,在发布的代码中重载?我认为你的意思是压倒性的。 – Zaki 2010-07-20 10:01:47
@ULysses,为什么没有压倒一切的工作? – Zaki 2010-07-20 10:03:34