12

最終変数を宣言したい抽象クラスがあります。

ただし、サブクラスのコンストラクターでのみこれらの変数に値を割り当てたいと思います。

どうやら、すべての「最終フィールドを初期化する必要がある」ため、これは不可能です。とにかく抽象クラスをインスタンス化することはできないので、理由はわかりません。

私が欲しいのはこのようなものです:

abstract class BaseClass {
    protected final int a;
}

class SubClass extends BaseClass {
    public SubClass() {
        a = 6;
    }
}

インターフェイスを実装するときのメソッドに似たものを想像します。次に、(サブ)クラスのメソッドを実装することも強制されます。

4

1 に答える 1

17

抽象クラスでa、サブクラスの値を取得してこのコンストラクターを呼び出すコンストラクターを定義する必要があります。このようにして、final属性が常に初期化されるようにします。

abstract class BaseClass {
    protected final int a;

    protected BaseClass(int a)
    {
        this.a = a;
    }
}

class SubClass extends BaseClass {
    public SubClass() {
        super(6);
    }
}
于 2012-10-20T12:14:14.540 に答える