2016-03-19 64 views
-1

你好吗?扩展MouseAdapter并实现ActionListener

我要问你,为什么当我们写一个事件处理我们写

专用类延伸MouseAdapter实现的ActionListener

我的意思是,为什么有MouseAdapter延伸,并与ActionListener的工具,是事如果它成为扩展的ActionListener实现MouseAdapter

谢谢

回答

0

的ActionListener只有一个方法。 MouseListener有很多方法。所以,你可以实现MouseListener,但是你需要实现它的所有方法,即使你只想处理单个事件类型(比如mouseClicked)。

MouseAdapter是一个实现MouseListener的类,并通过执行...来实现其所有方法。所以扩展MouseAdapter很方便:它只允许覆盖感兴趣的方法。创建一个ActionAdapter是没有意义的,因为它会包含一个单一的方法,你总是需要重写才能做一些有用的事情。

请注意,虽然有一个类处理鼠标事件和动作事件是一种设计气味。听众应该关注单个任务:处理来自给定源的给定事件。

0

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

0

你不能写

extends ActionListener implements MouseAdapter 
因为 ActionListener

是一个界面,MouseAdapter不是。一个更好的问题是,为什么作者没有写

implements MouseListener, ActionListener 

和可能的答案是:

MouseAdapter是空的实现接口MouseListener其中定义了几个事件方法。现在,如果您只想实现事件方法,例如mouseClicked,然后执行MouseListener强制您为所有其他鼠标方法添加空实现。从MouseAdapter派生允许您只覆盖特定的方法,使您的监听器类更小。

现在使用Java 8定义默认方法的能力,像MouseListener这样的接口应该确实具有空的默认实现,使MouseAdapter多余。