0

インターフェイス C とそれを実装するクラス A があるとします。

ここで、A の実装を、クラス B を持つ 1 つを除く C のすべての関数に変更したいとします。A を拡張して C をオーバーライドする必要がありますか、それとも C を新しい独立したクラスとして実装する必要がありますか?

一部の電話会社が、基本的なインターフェイスである Phone を実装したいと考えており、既に OldPhone の古い実装をいくつか持っていて、そのすべての機能を保持したいと考えているとしましょう。電話をかけ、電話を切り、SMS を送信します。すべてを変更する必要がありますが、新しいスマートフォンを作るために他の新しい機能を望んでいます.OldPhoneを拡張する必要がありますか、それとも新しいクラスを作成する必要がありますか?

いつクラスを拡張する必要があるのか​​ 、いつインターフェイスを最初から実装する必要があるのか​​ を知りたい.概念的に異なります。

4

5 に答える 5

2

ここで、ほとんどの機能について、B が A とまったく同じように動作する必要があるとの要件を確認してください。ここで、B 実装 C を実装することを選択したとします。その後、将来クラス A ロジックが変更された場合、クラス B も変更する必要があります。したがって、要件には適していません。

ここで、A を拡張するとします。ただし、A と緊密に結合しているとします。A が変更された場合、Big も同じように動作します。

そのため、 compositionを使用して 2 つの単語を最大限に活用するようにしてください。B は C を実装し、A をデリゲートとして使用してこれらのメソッドを実装します。私の答えは、あなたの場合、必ずしもすべての場合に最適な選択であるとは限りません。

于 2013-06-19T14:57:02.690 に答える
1

経験則として、親子関係がある場合にのみクラスを拡張する必要があります。それ以外の場合は、インターフェイスの実装に進みます。

于 2013-06-19T14:47:16.790 に答える