我的类实现了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)。你能不能以这种方式在嵌套类中实现覆盖方法?
答案 0 :(得分:8)
你的问题:
你能不能以这种方式在嵌套类中实现覆盖方法?
答案是否。 Eclipse(实际上 Java )抱怨说,当你宣布你的类是实现ActionListener时,你没有给你的类提供类中必要的actionPerformed(...)
方法自己的范围 - 最后一部分非常重要。实现接口的类必须在其自己的作用域中实现所有接口所需的方法,而不是在嵌套类中。请注意,这不会阻止您嵌套也实现ActionListener或其他接口的类,但无论如何,规则仍然是实现接口的非抽象类必须覆盖接口方法的所有。
但是,由于您没有将类的对象用作ActionListener,因此简单的解决方案是不要将您的类声明为实现ActionListener接口。问题解决了。实际上,你最好不要让你的GUI类实现你的监听器接口,因为将它们组合在一个类中是要求一个类做得太多。从技术角度来说,它不必要地降低了类的内聚力,并增加了它的耦合,从而降低了它的可读性和可维护性。