Javaでは、サブクラスのメンバーデータをオーバーライドし、そのオーバーライドされたバージョンをスーパークラスの実装で使用されるデータにすることは可能ですか?言い換えればサブクラスのメンバーデータをオーバーライドし、スーパークラスの実装で使用しますか?
は、ここで私が起こることを取得しようとしています、そしてそれは起こっていないものです:
abstract public class BasicStuff {
protected String[] stuff = { "Pizza", "Shoes" };
public void readStuff() {
for(String p : stuff) {
system.out.println(p);
}
}
}
..
public class HardStuff extends BasicStuff {
protected String[] stuff = { "Harmonica", "Saxophone", "Particle Accelerator" };
}
この呼び出し:
HardStuff sf = new HardStuff();
sf.readStuff();
。 .. Pizza
とShoes
を印刷します。代わりに後者を印刷したい。
これは階層的なOOの実践ではないことを認識しています。非常に特殊なケースのために、私はXMLの設定と反映を使って何かをしていました。
これを実行できる修飾語はありますか?
はい、私はサブクラスでこの問題を回避するために、つまりstuff[]
の内容が別の名前の配列に格納されていることを示すことによって使用できるラッパーがあることを認識しています。私はこれを単純にしておきたいと思っていますし、原理的には好奇心です。
ありがとうございます!
これは定義に従って上書きされていないが、子供のメンバ変数の値を変更するこのソリューションは、あなたが(例えば、テーマをサポートするためのDecoratorパターン)をオーバーライドするために多くの変数を持っている場合にははるかにエレガントです。 +1 – humbleSapiens