どうですか?MouseAdapterを継承し、ActionListenerを実装します
私たちは、イベント処理を記述するときに我々は
プライベートクラスAはMouseAdapterのはMouseAdapterのが伸びるとのActionListenerを実装して、それが問題ですなぜ私が何を意味するかのActionListener
が実装拡張書く理由をお聞きしたいですそれはのActionListenerがMouseAdapterの
を実装して拡張になっている場合
どうですか?MouseAdapterを継承し、ActionListenerを実装します
私たちは、イベント処理を記述するときに我々は
プライベートクラスAはMouseAdapterのはMouseAdapterのが伸びるとのActionListenerを実装して、それが問題ですなぜ私が何を意味するかのActionListener
が実装拡張書く理由をお聞きしたいですそれはのActionListenerがMouseAdapterの
を実装して拡張になっている場合
のActionListenerは、単一のメソッドを持っているあなたに感謝。 MouseListenerには多くのメソッドがあります。したがって、MouseListenerを実装できますが、単一のイベントタイプ(mouseClickedなど)を処理したい場合でも、すべてのメソッドを実装する必要があります。
MouseAdapterは、MouseListenerを実装するクラスであり、何もしないことですべてのメソッドを実装します。 MouseAdapterを拡張することは便利です。関心のあるメソッドだけをオーバーライドすることができます。 ActionAdapterの作成には、単一のメソッドが含まれているため、何か有用なことを行うために常にオーバーライドする必要があるため、何の意味もありません。
ただし、マウスイベントとアクションイベントの両方を単一のクラスハンドルで処理することは、デザインの匂いであることに注意してください。リスナーは、特定のソースから特定のイベントを処理するという1つのタスクに集中する必要があります。
MouseAdapterとActionListenerの違いは、MouseAdapterが抽象クラスであり、ActionListenerがインターフェイスであることです。 Javaインタフェースでは実装され、抽象クラスが拡張されています。
抽象クラスとインターフェイスは同じような役割を果たしますが、いくつかの重要な違いがあります。詳しくは、両方のドキュメントを参照してください。
MouseAdapterの https://docs.oracle.com/javase/7/docs/api/java/awt/event/MouseAdapter.html のActionListener https://docs.oracle.com/javase/7/docs/api/java/awt/event/ActionListener.html
ActionListener
はインタフェースであり、MouseAdapter
ではないので、あなたは
extends ActionListener implements MouseAdapter
を書き込むことはできません。著者は
implements MouseListener, ActionListener
を書いていない理由を、より良い質問があり、おそらく答えは次のとおりです。
MouseAdapter
は、いくつかのイベントメソッドを定義するインタフェースMouseListener
の空の実装です。イベントメソッドでのみ実装する場合は、 mouseClicked
の場合、MouseListener
を実装すると、他のすべてのマウスメソッドに対して空の実装を追加する必要があります。 MouseAdapter
から派生すると、特定のメソッドをオーバーライドするだけで、リスナークラスを小さくすることができます。
デフォルトのメソッドを定義するJava 8の機能では、MouseListener
のようなインターフェイスは実際には空のデフォルトの実装を持つべきなので、MouseAdapter
は不要です。