2

例を挙げて私の質問を明確にしましょう。interface Iメソッドabc()が定義されているとします。Iを実装し、abc() メソッドをオーバーライドする別の 2 つのクラスがAあります。今私の質問は、メソッドを定義するためだけにユーザーインターフェイスを作成し、インターフェイスを定義および実装せずにクラスに直接実装しないのはなぜですか?のように...B

interface I{
    public void abc();
}
class A implements I{
  @Override
  public void abc() { ... }
}
class B implements I{
  @Override
  public void abc() { ... }
}

それ以外の

class A {
  public void abc() { ... }
}
class B {
  public void abc() { ... }
}


小さな例での説明は非常に役に立ちます。ありがとうございました。

4

5 に答える 5

2

できればできますがA、同じように治療することはできませんB。タイプのオブジェクトを取得し、それらを混合する共通の方法はありませんがABメソッドを呼び出すことはできabc()ます。

于 2013-08-27T04:16:55.607 に答える
1

ペットを扱うアプリケーションがあるとします。多くの種類のペットを飼うことができますが、それらはすべて同じ内部形状と機能を持っています。したがって、getPet() のような関数がある場合、Dogs Cats などに対して同じインターフェイスを返すことができます。

Pet オブジェクト (Dog または Cat) を取得したら、実際の Pet に基づいて実際のコードが異なる同じ関数 (feedPet() など) を実行できます。

インターフェイスの使用に固執しなかった場合は、異なるペットごとに異なる関数が必要になります。新しいペットを追加したい場合に変更する必要があるコードを想像してみてください。

少し不自然で申し訳ありませんが、ご理解いただければ幸いです。

于 2013-08-27T04:18:41.973 に答える
1

インターフェイスを使用すると、インターフェイスと実装を分離できます。インターフェイスに依存する別のクラスがあるとしabcます。この関数をインターフェースにカプセル化することで、このクラスは、 を実装する特定のクラスを知る (依存する) ことなくI、 の複数の実装で動作できるようになり、結合がはるかに少なくなり、よりオープンなシステムになります。abcabc

Python などの一部の言語では、「ダック」タイピングが使用されることに注意してください。引数で呼び出すすべての関数は、共通のインターフェイスを他の方法で表現する必要があるかどうかにo.abc()関係なく呼び出すことができます。静的に型付けされた言語には、別のメカニズムが必要です。AB

于 2013-08-27T04:22:28.177 に答える
1

ここでインターフェイスIを使用する利点は次のとおりです。

を公​​開するオブジェクトはすべてabc()、同じタイプのバケットI に入れることができると言えます。したがって、abc() を実装するオブジェクトはすべてタイプ I です。この追加情報を有効に活用できます。抽象化の優れた方法です。

エンジンと車輪を備えた機械はすべて乗り物です

于 2013-08-27T04:23:40.807 に答える
0

前の回答に加えて、 と の両方Aが同じ方法でBメソッドを実装する場合、インターフェイスの代わりに抽象クラスをabc作成することを常に考えることができます。Iしたがって、メソッドを 1 回実装するだけでよいという追加のボーナスとともに、他の応答に記載されている継承の同じ利点が得られます。

さらに参照するために、抽象クラスとインターフェイスの使用に関する記事を次に示します。 記事: JavaWorld

于 2013-08-27T06:10:04.697 に答える