扩展 MouseAdapter 并实现 ActionListener



为什么当我们编写事件处理时,我们写

私有类 A 扩展 MouseAdapter 实现 ActionListener

为什么使用鼠标适配器扩展并使用ActionListener实现,如果它成为扩展是否重要 ActionListener 实现鼠标适配器

你不能写

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中实现接口,并扩展抽象类。

抽象类和接口可以履行类似的角色,但有一些关键区别,我建议您查看两者的文档以了解更多信息。

鼠标适配器https://docs.oracle.com/javase/7/docs/api/java/awt/event/MouseAdapter.html动作侦听器 https://docs.oracle.com/javase/7/docs/api/java/awt/event/ActionListener.html

相关内容

  • 没有找到相关文章

最新更新