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