web-dev-qa-db-ja.com

インターフェースは別のインターフェースを拡張しますが、そのメソッドを実装します

In 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に実装されたメソッドのほかに実装記号があります

そして、マウスをホバーすると、メソッドを実装していると言われます!!!

43
GingerHead

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

インターフェースは別のインターフェースのメソッドを実装せず、単にそれらを拡張します。インターフェース拡張が必要な​​1つの例は、2つのメソッドmoveForwardmoveBackを備えたビークルインターフェースを持っているが、ビークルであるがいくつかの追加メソッドを備えた航空機を組み込む必要があることを考慮してください。 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);
};
65
AlexTheo

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

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

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

インターフェイスは他のインターフェイスを実装できません。拡張のみ可能です。

20
JB Nizet

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

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

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

7
Marko Topolnik