你好嗎?擴展MouseAdapter並實現ActionListener
我要問你,爲什麼當我們寫一個事件處理我們寫
專用類延伸MouseAdapter實現的ActionListener
我的意思是,爲什麼有MouseAdapter延伸,並與ActionListener的工具,是事如果它成爲擴展的ActionListener實現MouseAdapter
謝謝
你好嗎?擴展MouseAdapter並實現ActionListener
我要問你,爲什麼當我們寫一個事件處理我們寫
專用類延伸MouseAdapter實現的ActionListener
我的意思是,爲什麼有MouseAdapter延伸,並與ActionListener的工具,是事如果它成爲擴展的ActionListener實現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/event/ActionListener.html
你不能寫
extends ActionListener implements MouseAdapter
因爲
ActionListener
是一個界面,MouseAdapter
不是。一個更好的問題是,爲什麼作者沒有寫
implements MouseListener, ActionListener
和可能的答案是:
MouseAdapter
是空的實現接口MouseListener
其中定義了幾個事件方法。現在,如果您只想實現事件方法,例如mouseClicked
,然後執行MouseListener
強制您爲所有其他鼠標方法添加空實現。從MouseAdapter
派生允許您只覆蓋特定的方法,使您的監聽器類更小。
現在使用Java 8定義默認方法的能力,像MouseListener
這樣的接口應該確實具有空的默認實現,使MouseAdapter
多餘。