51

インターフェイスが別のインターフェイスを拡張するときの Java の場合:

  1. なぜそのメソッドを実装するのですか?
  2. インターフェイスにメソッド本体を含めることができない場合、どのようにメソッドを実装できますか
  3. 他のインターフェイスを拡張して実装しない場合、どのようにメソッドを実装できますか?
  4. 別のインターフェースを実装するインターフェースの目的は何ですか?

これには Java の主要な概念があります。

編集:

public interface FiresDragEvents {

  void addDragHandler(DragHandler handler);

  void removeDragHandler(DragHandler handler);
}


public interface DragController extends FiresDragEvents {

  void addDragHandler(DragHandler handler);

  void removeDragHandler(DragHandler handler);

  void dragEnd();

  void dragMove();
}

Eclipse では、実装されたメソッドのほかに実装記号がありDragControllerます。

そして、マウスを合わせると、メソッドを実装していると表示されます!!!

4

3 に答える 3

79

なぜそのメソッドを実装するのですか? インターフェイスにメソッド本体を含めることができない場合、どのようにメソッドを実装できますか? 他のインターフェイスを拡張して実装しない場合、どのようにメソッドを実装できますか? 別のインターフェースを実装するインターフェースの目的は何ですか?

インターフェイスは、別のインターフェイスのメソッドを実装するのではなく、それらを拡張するだけです。インターフェース拡張が必要な​​例: 2 つのメソッドを備えた車両インターフェースがmoveForwardあり、車両であるがのmoveBackようないくつかの追加メソッドを備えた Aircraft を組み込む必要があるとします。moveUpmoveDown

public interface IVehicle {
  bool moveForward(int x);
  bool moveBack(int x);
};

そして飛行機:

public interface IAirplane extends IVehicle {
  bool moveDown(int x);
  bool moveUp(int x);
};
于 2012-04-19T12:05:35.247 に答える
23

インターフェイスは動作を定義します。たとえば、Vehicleインターフェイスはmove()メソッドを定義する場合があります。

Car は Vehicle ですが、追加の動作があります。たとえば、CarインターフェイスはstartEngine()メソッドを定義する場合があります。Car は Vehicle でもあるため、Carインターフェースはインターフェースを拡張し、(継承された) とVehicleの 2 つのメソッドを定義します。move()startEngine()

Car インターフェイスにはメソッドの実装がありません。Car を実装するクラス (フォルクスワーゲン) を作成する場合、そのインターフェイスのすべてのメソッドの実装を提供する必要があります:move()startEngine().

インターフェイスは、他のインターフェイスを実装できません。それを伸ばすことしかできません。

于 2012-04-19T11:56:36.553 に答える
8

ad 1. メソッドを実装していません。

ad 4. あるインターフェースを拡張する目的は、別のインターフェースを実装するのではなく、より具体的なインターフェースを構築することです。たとえば、SortedMapを拡張するインターフェイスですMap。ソートの側面に関心のないクライアントはMap、たとえば のすべてのインスタンスに対してコーディングして処理できます。TreeMapこれは を実装していますSortedMap。同時に、ソートされた側面に関心のある別のクライアントは、SortedMapインターフェースを介してそれらの同じインスタンスを使用できます。

あなたの例では、スーパーインターフェースからのメソッドを繰り返しています。合法ではありますが、不要であり、最終結果に何も変わりません。これらのメソッドが存在するかどうかに関係なく、コンパイルされたコードはまったく同じになります。Eclipse のホバーが何を言おうと、インターフェイスは何も実装しないという基本的な真実とは無関係です。

于 2012-04-19T11:56:12.037 に答える