1

次のクラス階層を検討してください。

ベース <-- 派生1

ベース <-- Derived2

Base には static フィールドがあります。派生クラスにその静的フィールドを継承させたいのですが、各クラスにはその静的フィールドの独自の「インスタンス」が必要です (つまり、同じ名前の静的フィールドが複数あることを意味します)。それDerived1.staticFieldは とは異なりDerived2.staticFieldます。どうすればいいですか?

私の質問を理解していただければ幸いです。私の説明を何らかのコードでサポートしたい場合は教えてください。

public class Base
{
    protected static String staticField = "Base";

    protected void printIt()
    {
        System.out.println(staticField);
    }
}

public class Derived1 extends Base
{
    //Override somehow
    protected static staticField = "Derived1";
}

public class Dervied2 extends Base
{
    //Override somehow
    protected static staticField = "Derived2";
}

instanceOfBase.printIt()「ベース」を印刷します

instanceOfDerived1.printIt()「Derived1」を出力します

instanceOfDerived2.printIt()「Derived2」を出力します

4

4 に答える 4

2

静的メソッド/フィールドは型にバインドされているため、インスタンスとは関係ありません。

同じ静的フィールドをサブクラスに追加することもできますが、これはポリモーフィズムではないことに注意してください。これは単に隠れているだけです。これは、静的メソッドをサブクラスでオーバーライドできないという動作と一致しています。

あなたのソリューションに対してより良いアプローチを試すことをお勧めします。オーバーライドされた静的フィールドは、ポリモーフィズムを購入しません。

于 2013-06-09T07:38:12.900 に答える
1

「静的フィールド」は、クラスの一部でさえないグローバル変数と見なすことができます。Derived1.staticField を Derived2.staticField と異なるものにすることは不可能です。これは、静的フィールドが設計された方法であるためです。

于 2013-06-09T07:48:43.460 に答える