我正在寻找谷歌条款。我只是不确定如何描述这种语法:
JButton myButton = new JButton("Press Me");
myButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
System.out.println("MyButton was pressed.");
}
});
这种语法对我来说是新的。这个模式/技术有名称,它是什么?
另外,关于加分的后续问题:-)为什么会存在这个问题?在我看来,这将导致一些相当混乱的代码。为什么不延长ActionListener
?
原谅我,我想问你为什么不实施 ActionListener
。
答案 0 :(得分:5)
它被称为匿名分类接口。
基本上,您正在使用ActionListener的接口并创建一个仅由封装它的类所知的实例。
您无法扩展ActionListener,因为它是一个接口。扩展类意味着继承它,并且不能从Java中的接口继承。
接口更易于定制,更像是模板,不能是独立的类。通常,将接口设置为独立类是没有任何意义的。
答案 1 :(得分:2)
正如Rohit Jain所说:它是一个匿名的内部阶级。
是的,您可以在另一个文件的普通类中实现ActionListener
接口。我希望在以下情况下这样做:
匿名内部类不需要其他文件。你有代码,就在需要它的地方,但是阻碍了代码重用。
答案 2 :(得分:0)
与已经说过的其他人一样,它被称为匿名内部类。这是一个示例/解释:http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html
Sarajog
答案 3 :(得分:0)
这一点的重点是避免定义一个全新的“真实”类,占用一个完整的文件(是的,大不了,我知道),因为其他目的非常微不足道。即它与你正在做的事情相结合,你想要这种低注意力的机制。
答案 4 :(得分:0)
这称为匿名内部类。实际上,您正在实现ActionListener并同时实例化这个新的匿名类 - 类型名称将由编译器生成。如果你只需要一次课,你会这样做。
请参阅http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html