必须实现继承的抽象方法

时间:2013-06-15 21:35:33

标签: java swing interface nested-class actionevent

我的类实现了ActionListener。我在下面实现了以下嵌套类:

JMenuItem mntmNew = new JMenuItem("New...");
    mntmNew.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e){
            doNew(e); //calls to outer class for cleaner code
        }
    });
    mnFile.add(mntmNew);

    JMenuItem mntmLoad = new JMenuItem("Load...");
    mntmLoad.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e){
            doLoad(e); //calls to outer class for cleaner code
        }
    });
    mnFile.add(mntmLoad);

//etc. for the rest of the menu system

但是,Eclipse仍然告诉我,我的类必须实现继承的抽象方法ActionListener.actionPerformed(ActionEvent e)。你能不能以这种方式在嵌套类中实现覆盖方法?

1 个答案:

答案 0 :(得分:8)

你的问题:

  

你能不能以这种方式在嵌套类中实现覆盖方法?

答案是。 Eclipse(实际上 Java )抱怨说,当你宣布你的类是实现ActionListener时,你没有给你的类提供类中必要的actionPerformed(...)方法自己的范围 - 最后一部分非常重要。实现接口的类必须在其自己的作用域中实现所有接口所需的方法,而不是在嵌套类中。请注意,这不会阻止您嵌套也实现ActionListener或其他接口的类,但无论如何,规则仍然是实现接口的非抽象类必须覆盖接口方法的所有

但是,由于您没有将类的对象用作ActionListener,因此简单的解决方案是不要将您的类声明为实现ActionListener接口。问题解决了。实际上,你最好不要让你的GUI类实现你的监听器接口,因为将它们组合在一个类中是要求一个类做得太多。从技术角度来说,它不必要地降低了类的内聚力,并增加了它的耦合,从而降低了它的可读性和可维护性。