0

インターフェイスと抽象メソッドは、開発者がそれらのメソッドをクラスに確実に含めるために使用されるだけですか??

これもプロセスで実現できないのでしょうか。たとえば、テスト駆動開発。

融通が利かないそうです。コードが変更されるとどうなりますか?

これらの制限の必要性を理解するのに苦労しています。
将来さらに多くの作業を行う可能性があるのに、なぜコードにインターフェイスを追加するのでしょうか?

4

2 に答える 2

0

通常、インターフェイスまたは抽象クラスを使用して、2 つの具象クラスを互いに分離します。

Java の MouseListener インターフェイスを見てみましょう。これにより、マウス クリックなどの特定のイベントを追跡できます。このインターフェイスは、次の 5 つのメソッドを宣言します。

void mouseClicked(MouseEvent e);
void mouseEntered(MouseEvent e);
void mouseExited(MouseEvent e);
void mousePressed(MouseEvent e);
void mouseReleased(MouseEvent e);

ボタン、テキスト フィールドなどの UI 要素 (抽象クラス Component のMouseListenerサブクラス) を使用すると、 をメソッドに登録できますaddMouseListener

このComponentクラスには、マウスが特定の領域内で移動したこと、およびその領域でマウス ボタンが押された、または離されたことを検出するためのコードが含まれている可能性があります。nowのすべてのサブクラスはComponentその動作の恩恵を受け、これを自分で実装する必要はありません。

マウスイベントでできることはたくさんあります。マウスの位置に基づいて何かの色を変更したり、マウスのクリックに基づいて何かを表示または非表示にしたりしたいかもしれません....マウスイベントでできることの無限のリストがあります. では、ある特定のケースで何をしたいのかをどのよう知るComponent必要がありますか?

しかし、特定の のマウス イベントで何をしたいのかがわかっているので、上記のイベントが発生したときに呼び出されるComponentを登録できます。MouseListenerそして、あなたが実装するので、MouseListenerあなたが望むことは何でもできます....

この特定の例では、インターフェイスは非常に柔軟です。特定のマウス イベントで別のことをしたい場合でも、Componentクラスを変更する必要がないからです。確かに、変更する必要がありますMouseListener。しかし、 の実装はComponent、マウス イベントで実行したい可能性のあるすべてのことに対して同じままです。

それが少し役立つことを願っています...


アップデート

おそらく「問題」は、一部の言語 (Java、C#、C++ など) では、コンパイラが特定のオブジェクトに対して存在するメソッドを知るために、コンパイル時に型情報を提供する必要があることです。

ウィキペディアから:

型推論を欠く静的に型付けされた言語 (C や Java など) では、プログラマーは、メソッドまたは関数で使用する予定の型を宣言する必要があります。これは、プログラムの追加ドキュメントとして使用できます [...]

したがって、あなたの質問にyesで答えることができると思います。インターフェースと抽象メソッドは、開発者がそれらのメソッドをクラスに確実に含めるために使用されますが、上記の言語では、コンパイラーがメソッドが存在するかどうかを判断する他の手段がないためです。

しかし、私が上で説明しようとした理由から、あなたの質問に「いいえ」と答えることもできます。

難しいもの....

于 2013-08-02T09:52:29.787 に答える