匿名内部类需要覆盖现有方法吗?

时间:2015-02-27 08:47:47

标签: java anonymous-inner-class

所以我通过

创建了一个匿名的内部类
    obj.addMouseListener(new MouseListener()

但是因为它给了我一个错误(它希望我实现至少4个方法,其名称如mouseReleased,mouseClicked等。因为我假设该类没有正确扩展/实现MouseListener,我偶然发现了另一个SO文章(How can an anonymous class use "extends" or "implements"?),我明白匿名内部类总是扩展/实现一个超类(对吧?)。所以我继续寻找答案,偶然发现另一篇SO文章(I'm having trouble choosing when to use a MouseListener object)与我的问题没有多大关系,但我看到线程的所有者写了这些代码行

    @Override public void mouseExited(MouseEvent e) {}
    @Override public void mouseEntered(MouseEvent e) {}
    @Override public void mouseReleased(MouseEvent e) {}
    @Override public void mousePressed(MouseEvent e) {}

这是我一直缺少的吗?我已经尝试立即@override整个类,但这只是给了我另一个错误。我可以看到这将如何解决问题,但它对我来说看起来非常混乱。

基本上归结为2个问题; 是我刚才写的/发现的,这是解决我问题的方法 和 如果这是解决方案,是否有其他(更清洁的)解决方案?

1 个答案:

答案 0 :(得分:10)

MouseListener是一个界面 - 它没有任何方法实现,所以如果您要将它作为匿名内部类的基础,那么您需要为所有内容提供实现

如果您只想提供某些方法的实现,则应该扩展MouseAdapter - 提供无操作实现,因此您可以覆盖所需的实现。