【发布时间】:2014-12-22 06:46:07
【问题描述】:
因此,在研究 lambda 表达式并使用它们来替换 Java 中的 EventHandlers 的匿名内部类时,我遇到了一些让我停下来思考的匿名内部类。例如,当为通常实现 ActionListener 的东西编写匿名内部类时,我们编写
myJButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e){
//DO SOMETHING
}
});
我对此感到困惑的是,ActionListener 是一个接口,所以我认为有必要做一些类似...
myJButton.addActionListener(new myButtonListener implements ActionListener() {
@Override
public void actionPerformed(ActionEvent e){
//DO SOMETHING
}
});
但这甚至无法编译。我想我认为这显然是因为如果我们使用私有内部类,我们使用
private MyButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
//DO SOMETHING
}
}
myJButton.addActionListener(new MyButtonListener());
所以我的问题是:
1) 为什么我们可以直接从接口创建匿名内部类,而不必通过实现该接口的类来创建?
2) 为什么我无法创建一个实现 ActionListener 的匿名内部类,而不是像我在第二个代码 sn-p 中显示的那样直接从它实现?
【问题讨论】:
-
你认为这里的 anonymous 是什么意思?
标签: java inheritance interface anonymous-inner-class