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