ここにいくつかのサンプルコードがあります、
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を返します// lookup()がオーバーライドされるため、10を期待しましたが、0ではありません!誰かがこれを明確にすることができますか?
のインスタンス変数の初期化はDerived
、ルックアップメソッドの実行時に発生していません。Derived
メソッドが呼び出されたときにのインスタンス変数が初期化されていることを確認するにはどうすればよいですか?