赫雷什一些示例代碼,問題的實例變量初始化
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