右邊是一種匿名內(nèi)部類的寫法,
new Object(){}代表匿名內(nèi)部類的一個子對象,{}內(nèi)的代碼依據(jù)此處“Object”是否包含抽象方法分兩種情況:
1,若Object為接口或含有抽象方法(抽象類)、{}內(nèi)必須包含該接口的方法實現(xiàn)代碼或者說重寫該抽象類的抽象方法(抽象類或接口無法實例化)
new Thread(new Runnable(){ //匿名
public void run(){
System.out.println("runnable run");
}
}).start();
如上面這段創(chuàng)建線程并start的代碼,new Thread括號內(nèi)傳入的就是一個匿名內(nèi)部類(匿名對象)。該匿名內(nèi)部類實現(xiàn)了Runnable接口的run方法,因此可以創(chuàng)建對象并作為Thread構(gòu)造函數(shù)的入?yún)?/p>
2,若Object為普通類,{}內(nèi)可以重寫也可以不重寫Object里面的方法。要注意的是,這個時候
new Object(){} 整體作為Object對象的一個匿名子類對象
另外,通常來說這種寫法,適用于你想重寫某個父類的某個方法(或?qū)崿F(xiàn)某個接口的方法)并調(diào)用,但是又不想再創(chuàng)建一個class類來重寫(或?qū)崿F(xiàn))的時候。通過以下格式來定義:
new 父類名/接口名(){ 定義子類成員或者覆蓋父類方法 }.方法
只是比較淺顯的回答,具體樓主多翻翻書看看吧、