簡體   English   中英

擴展 MouseAdapter 並實現 ActionListener

[英]extends MouseAdapter and implements ActionListener

為什么當我們寫一個事件處理我們寫

私有類 a 擴展 MouseAdapter 實現 ActionListener

為什么使用 MouseAdapter extends 並使用 ActionListener 實現,如果它成為 extends ActionListener 實現 MouseAdapter 是否重要

你不能寫

extends ActionListener implements MouseAdapter

因為ActionListener是一個接口而MouseAdapter不是。 一個更好的問題是作者為什么不寫

implements MouseListener, ActionListener

可能的答案是:

MouseAdapter是接口MouseListener一個空實現,它定義了幾個事件方法。 現在,如果您只想在事件方法上實現,例如mouseClicked ,那么實現MouseListener強制您為所有其他鼠標方法添加空實現。 MouseAdapter允許您僅覆蓋特定方法,從而使您的偵聽器類更小。

現在有了 Java 8 定義默認方法的能力,像MouseListener這樣的接口應該真的有空的默認實現,這使得MouseAdapter多余。

ActionListener 有一個方法。 MouseListener 有很多方法。 因此,您可以實現 MouseListener,但隨后您需要實現其所有方法,即使您只想處理單個事件類型(例如 mouseClicked)。

MouseAdapter 是一個實現 MouseListener 的類,並通過做……什么都不做來實現它的所有方法。 所以擴展 MouseAdapter 很方便:它只允許覆蓋感興趣的方法。 創建 ActionAdapter 是沒有意義的,因為它只包含一個方法,你總是必須重寫它才能做一些有用的事情。

但是請注意,讓一個類同時處理鼠標事件和動作事件是一種設計風格。 偵聽器應專注於單個任務:處理來自給定源的給定事件。

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 /事件/ActionListener.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM