In Javaインターフェイスが別のインターフェイスを拡張する場合:
これには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
に実装されたメソッドのほかに実装記号があります
そして、マウスをホバーすると、メソッドを実装していると言われます!!!
なぜそのメソッドを実装するのですか?インターフェイスにメソッド本体を含めることができない場合、どのようにメソッドを実装できますか?他のインターフェイスを拡張し、実装しない場合、どのようにメソッドを実装できますか?別のインターフェイスを実装するインターフェイスの目的は何ですか?
インターフェースは別のインターフェースのメソッドを実装せず、単にそれらを拡張します。インターフェース拡張が必要な1つの例は、2つのメソッドmoveForward
とmoveBack
を備えたビークルインターフェースを持っているが、ビークルであるがいくつかの追加メソッドを備えた航空機を組み込む必要があることを考慮してください。 moveUp
、moveDown
などですので、最終的には次のようになります。
public interface IVehicle {
bool moveForward(int x);
bool moveBack(int x);
};
そして飛行機:
public interface IAirplane extends IVehicle {
bool moveDown(int x);
bool moveUp(int x);
};
インターフェイスは動作を定義します。たとえば、Vehicle
インターフェイスはmove()
メソッドを定義します。
車は乗り物ですが、追加の動作があります。たとえば、Car
インターフェイスはstartEngine()
メソッドを定義します。 CarはVehicleでもあるため、Car
インターフェイスはVehicle
インターフェイスを拡張し、2つのメソッドを定義します:move()
(継承)およびstartEngine()
。
Carインターフェースにはメソッド実装がありません。 Carを実装するクラス(Volkswagen)を作成する場合、そのインターフェイスのすべてのメソッドmove()
およびstartEngine()
の実装を提供する必要があります。
インターフェイスは他のインターフェイスを実装できません。拡張のみ可能です。
ad 1.メソッドを実装しません。
ad 4.あるインターフェイス拡張の目的は、別のインターフェイスを実装せずに、より具体的なインターフェイスを構築することです。たとえば、SortedMap
はMap
を拡張するインターフェイスです。ソートの側面に興味のないクライアントは、Map
に対してコーディングし、たとえばTreeMap
を実装するSortedMap
のすべてのインスタンスを処理できます。同時に、ソートされたアスペクトに関心のある別のクライアントは、SortedMap
インターフェイスを介してそれらの同じインスタンスを使用できます。
この例では、スーパーインターフェースからのメソッドを繰り返しています。合法ですが、それは不要であり、最終結果に何も変更しません。コンパイルされたコードは正確に同じこれらのメソッドが存在するかどうかになります。 Eclipseのホバーが何を言っても、インターフェースは何も実装しないという基本的な真実とは無関係です。