我想问你为什么我们写一个事件处理我们写
私有类扩展MouseAdapter实现ActionListener
我的意思是为什么使用MouseAdapter进行扩展并使用ActionListener实现,如果它成为扩展是否重要ActionListener实现了MouseAdapter
谢谢
答案 0 :(得分:0)
ActionListener只有一个方法。 MouseListener有很多方法。因此,您可以实现MouseListener,但是您需要实现其所有方法,即使您只想处理单个事件类型(例如mouseClicked)。
MouseAdapter是一个实现MouseListener的类,它通过执行什么来实现它的所有方法。因此,扩展MouseAdapter非常方便:它只允许覆盖感兴趣的方法。创建一个ActionAdapter是没有意义的,因为它将包含一个单独的方法,你总是必须覆盖它来做一些有用的事情。
但请注意,单个类处理鼠标事件和动作事件都是一种设计气味。监听器应该关注单个任务:从给定的源处理给定的事件。
答案 1 :(得分: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
答案 2 :(得分:0)
你不能写
extends ActionListener implements MouseAdapter
因为ActionListener
是一个界面而MouseAdapter
不是。{一个更好的问题是作者为什么不写
implements MouseListener, ActionListener
可能的答案是:
MouseAdapter
是接口MouseListener
的空实现,它定义了几个事件方法。现在,如果您只想在事件方法上实现,例如mouseClicked
,然后实现MouseListener
强制您为所有其他鼠标方法添加空实现。从MouseAdapter
派生允许您仅覆盖特定方法,使您的侦听器类更小。
现在Java 8能够定义默认方法,像MouseListener
这样的接口应该有空的默认实现,使MouseAdapter
变得多余。