このメソッドは、スーパークラスのコンストラクタで呼びされています。この時点では、クラスのフィールドはまだ初期化されていません。

これはたくさんの具象クラスを作るためです。以下のクラスを検討してください。

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 の初期化されていない値が読み出されます。