-1

シナリオ

乗り物は3種類

  1. 陸上を移動する乗り物。
  2. 水上を移動する乗り物。
  3. 空中を移動する乗り物。

すべてのタイプの車両に共通の動作があり、すべて移動できます。しかし、それらの動き方はまったく異なります(車両が移動するメディア)。

つまり、すべてのビークルには共通の動作 (移動) がありますが、完全に独自の実装があります。

質問1

この場合、すべての車両の実装が完全に異なるため、仮想関数 (Move) を持つ基本クラスをデフォルトの実装で使用できますか?

また

デフォルトの実装がないため、Abstract クラスはこの設計に適したアプローチでしょうか?

質問2

デフォルトの実装がない場合、抽象メソッドを使用する必要がありますか? (他のシナリオを確認するためだけに)

4

3 に答える 3

0

質問1

はい、デフォルトの実装がないため、この設計には抽象クラスが適していますか?

質問2

はい、デフォルトの実装がない場合は抽象メソッドを使用します。

于 2013-01-30T12:30:56.783 に答える
0

、または以外のVehicleものがないので、おそらくクラスが必要です。LandWaterAirabstract

メソッドについても同様です。実装が常に異なる場合 (つまり、常に実装を再定義する必要がある場合)abstractは問題ありません。

共有実装がない場合は、インターフェースがその役割を果たします。

于 2013-01-30T12:31:34.263 に答える
0

少しあいまいな質問ですが、おそらく宿題をやっていると思います。

まず、仮想メソッドを使用すると、すべてのサブクラスが継承するデフォルトの動作を記述できますが、独自のものに置き換えるオプションがあります。

基本的に、共通のインターフェイスに類似した共通の動作があるかどうかを自問する必要があります。

音楽プレーヤーを考えてみてください。インターフェイスとは何ですか?停止、早送り、巻き戻し、再生を行いましょう。

これはインターフェースの良い例です。すべてのデフォルトの「動作」は、メソッドの名前によって記述されます。

CD プレーヤーの「再生」方法は、MP3 プレーヤーの「再生」方法とはまったく異なります。上記は抽象メソッドの例です。

これが必要な動作のすべてである場合、抽象クラスは必要なく、インターフェースが必要です。

ただし、ここで最初まで巻き戻して再生するボタンを考えてみましょう。これは仮想メソッドの良い例であり、それを実装するには抽象クラスが必要です。すでに記述した抽象メソッドに基づいてデフォルトの実装を提供できます。トラック;))。さらに、サブクラスには、必要に応じて動作を上書きする機能があります。

あなたの質問への答え:

質問 1: いいえと思います。デフォルトの実装がないため、Move は抽象的である必要があります (デフォルトの暗黙の動作ですが)。

質問 2: はい。デフォルトの実装がない場合は、abstract を使用してください。ただし、クラスが完全に抽象メソッドで構成されていることがわかった場合は、代わりにインターフェイスを定義する方がよいかどうかを自問してください。

于 2013-01-30T12:34:36.710 に答える