2011-02-27 89 views

回答

6

这就是所谓的匿名内部类。它创建一个未命名的类,它扩展了WindowAdapter(它也可以指定一个接口,在这种情况下类将实现该接口),并创建该类的一个实例。在括号内,你必须实现所有的抽象方法或所有的接口方法,你也可以重写方法。

+2

@ e2e8在这种情况下,效果是,代替执行'windowClosing'在外部类或单独命名的类,你只需要使用一个匿名内部类。 这样,您的类不必实现'WindowListener'接口或扩展'WindowAdapter'抽象适配器类,也不必创建一个全新的类来接收windowClosing事件。 – tiago2014 2011-02-27 06:10:30

+0

@tiagoinu:+1用于添加我忘记的内容,即匿名内部类的_purpose_。 :-) – 2011-02-27 06:12:00

2

,补充andersoj的回答,你通常当一个方法需要X的一个实例,但X是一个抽象类或接口中使用它们。

在这里,你实际上是从创建WindowAdapter的派生类,并重写的方法之一做了具体的任务。

这句法是事件处理程序/接收器非常普遍。

1

它是一个匿名内部类。这只是一条捷径。你能想象的代码会是什么样子,如果你需要将其创建为顶层类:

class CloseApplicationWindowAdapter extends WindowAdapter { 
    public void windowClosing(WindowEvent e) { 
     System.exit(0); 
    } 
} 

然后,你的代码中,你会怎么做:

CloseApplicationWindowAdapter adapter = new CloseApplicationWindowAdapter(); 
addWindowListener(adapter); 

两种解决方案都具有完全相同的效果(例如,匿名课程会创建一个Class$1.class文件)。如果匿名类没有太大/复杂/重要,Java程序员通常更喜欢匿名类方法。

相关问题