2011-02-27 88 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程序員通常更喜歡匿名類方法。

相關問題