0

状況:

  • 私はいくつかのメソッドを持つ抽象クラスを持っています:
  • 上記のクラスを拡張するいくつかのサブクラスがあります
  • <MyAbstractClass>メインクラスのサブクラスの新しいオブジェクトで満たされたコレクションコレクションがあります
  • 通常呼び出すメソッドをオーバーライドする方法で実行したいサブクラスの 1 つの固有のメソッドがあります。

つまり、条件が true の場合、通常のcollection.get(i).method();whereiはインデックスではなく、実行しますcollection.get(i).specificMethod();

さらに勉強するための適切なトピックを誰か教えてもらえますか? また、私の状況を少し洞察すると、驚くほどうまくいくでしょう。

4

2 に答える 2

1

あなたが望むように聞こえますinstanceof

for (AbstractThing thing : yourCollection) {
    if (thing instanceof SubclassWithSpecialMethod) {
        ((SubclassWithSpecialMethod)thing).specialMethod();
    }
    else {
        thing.method();
    }
}

には完全に正当な使用法がありinstanceofますが、使用している場合 (特に頻繁に使用している場合) は、一歩下がって全体像を見て、何らかの方法があるかどうかを確認することをお勧めします。そうしないように、物事を再編成することができます。

この場合、たとえば、抽象クラスが持っている可能性がmethodあり、特別な動作を持つサブクラスが特別な動作をオーバーライド methodする可能性があるため、呼び出し元は呼び出すだけでmethod、ポリモーフィズムが開始され、それを処理するときに特別な動作が与えられます特定のサブクラス。

于 2013-04-03T08:38:57.883 に答える
0

で条件を確認し、満たされmethod()ている場合は、そこから呼び出しspecificMethod()ます。あなたの説明によると、これは特定のサブクラスにのみ適用されます。

外部の状態をチェックしている場合は、フラグを渡して、同じインスタンスmethod()を呼び出す必要があるかどうかを示します。specificMethod()

于 2013-04-03T08:39:41.483 に答える