このメソッドは、スーパークラスのコンストラクタで呼びされています。この時点では、クラスのフィールドはまだ初期化されていません。
これはたくさんの具象クラスを作るためです。以下のクラスを検討してください。
abstract class A { int hashCode; abstract Object getValue(); A() { hashCode = getValue().hashCode(); } } class B extends A { Object value; B(Object v) { this.value = v; } Object getValue() { return value; } }
B
が構築されるとき、B
のコンストラクタが value
に値を設定する前に、A
クラスのコンストラクタが呼び出されます。
したがって、A
のコンストラクタが getValue
を呼び出すとき、value
の初期化されていない値が読み出されます。