Java匿名類

匿名類是指沒有類名的內(nèi)部類,必須在創(chuàng)建時使用 new 語句來聲明類。其語法形式如下:

new<類或接口>(){

// 類的主體

};

這種形式的 new 語句聲明一個新的匿名類,它對一個給定的類進(jìn)行擴(kuò)展,或者實(shí)現(xiàn)一個給定的接口。使用匿名類可使代碼更加簡潔、緊湊,模塊化程度更高。

匿名類有兩種實(shí)現(xiàn)方式:

繼承一個類,重寫其方法。

實(shí)現(xiàn)一個接口(可以是多個),實(shí)現(xiàn)其方法。

下面通過代碼來說明。

publicclass Out{

voidshow(){

System.out.println("調(diào)用 Out 類的 show() 方法");

}

}

publicclass TestAnonymousInterClass{

// 在這個方法中構(gòu)造一個匿名內(nèi)部類

privatevoidshow(){

Out anonyInter=newOut(){

// 獲取匿名內(nèi)部類的實(shí)例

voidshow(){

System.out.println("調(diào)用匿名類中的 show() 方法");

}

};

anonyInter.show();

}

publicstaticvoidmain(String[]args){

TestAnonymousInterClass test=newTestAnonymousInterClass();

test.show();

}

}

程序的輸出結(jié)果如下:

調(diào)用匿名類中的 show() 方法

從輸出結(jié)果可以看出,匿名內(nèi)部類有自己的實(shí)現(xiàn)。

提示:匿名內(nèi)部類實(shí)現(xiàn)一個接口的方式與實(shí)現(xiàn)一個類的方式相同,這里不再贅述。

匿名類有如下特點(diǎn):

1)匿名類和局部內(nèi)部類一樣,可以訪問外部類的所有成員。如果匿名類位于一個方法中,則匿名類只能訪問方法中 final 類型的局部變量和參數(shù)。

publicstaticvoidmain(String[]args){

inta=10;

finalintb=10;

Out anonyInter=newOut(){

voidshow(){

// System.out.println("調(diào)用了匿名類的 show() 方法"+a);? ? // 編譯出錯

System.out.println("調(diào)用了匿名類的 show() 方法"+b);// 編譯通過

}

};

anonyInter.show();

}

從?Java?8 開始添加了?Effectively final 功能,在 Java 8 及以后的版本中代碼第 6 行不會出現(xiàn)編譯錯誤,詳情可點(diǎn)擊《Java8新特性之Effectively final》進(jìn)行學(xué)習(xí)。

2)匿名類中允許使用非靜態(tài)代碼塊進(jìn)行成員初始化操作。

純文本復(fù)制

Out anonyInter=newOut(){

inti;{// 非靜態(tài)代碼塊

i=10;//成員初始化

}

publicvoidshow(){

System.out.println("調(diào)用了匿名類的 show() 方法"+i);

}

};

3)匿名類的非靜態(tài)代碼塊會在父類的構(gòu)造方法之后被執(zhí)行。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容