【发布时间】:2011-03-18 08:17:53
【问题描述】:
这里有一些示例代码,
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());
}
}
output: d.value() 返回 0 // 我希望 10 因为lookup() 被覆盖,但不是 0!有人可以澄清一下吗?
Derived 的实例变量的初始化在其查找方法执行时尚未发生。如何确保Derived 的实例变量在其方法被调用时被初始化?
【问题讨论】:
-
value()仅在 Base 中定义,并返回val仅在 Base 中定义并在 Base 构造函数中由“5”初始化。lookup是从 Base 构造函数中调用的,这意味着重载不起作用,因为 Derived 类还没有完全构造好 你对代码还有什么期望? -
@ULysses,发布的代码在哪里重载?我认为你的意思是覆盖。
-
@ULysses,为什么不覆盖工作?
标签: java instance instance-variables