更新時間:2020-05-07 14:39:18 來源:動力節(jié)點(diǎn) 瀏覽5059次
一點(diǎn)睛
匿名內(nèi)部類適合創(chuàng)建那種只需要一次使用的類,定義匿名內(nèi)部類的語法格式如下:
從上面的定義可以看出,匿名內(nèi)部類必須繼承一個父類,或?qū)崿F(xiàn)一個接口,但最多只能繼承一個父類,或?qū)崿F(xiàn)一個接口。
兩條規(guī)則。
匿名內(nèi)部類不能是抽象類。
匿名內(nèi)部類不能定義構(gòu)造器。由于匿名內(nèi)部類沒有類名,所以無法定義構(gòu)造器,但匿名內(nèi)部類可以初始化塊,可以通過初始化塊來完成構(gòu)造器需要完成的工作。
二實(shí)戰(zhàn)
1點(diǎn)睛
最常用的創(chuàng)建匿名內(nèi)部類的方式是創(chuàng)建某個接口類型的對象
2代碼
3運(yùn)行
購買了一個AGP顯卡,花掉了567.8
4說明
定義匿名內(nèi)部類無須class關(guān)鍵字,而是在定義匿名內(nèi)部類時直接生成該匿名內(nèi)部類的對象。
由于匿名內(nèi)部類不能是抽象類,所以匿名內(nèi)部類必須實(shí)現(xiàn)它的抽象父類或接口里包含的所有抽象方法。
三實(shí)戰(zhàn)
1點(diǎn)睛
當(dāng)通過接口來創(chuàng)建匿名內(nèi)部類時,匿名內(nèi)部類不能顯示創(chuàng)建構(gòu)造器,因此匿名內(nèi)部類里只有一個隱式的無參構(gòu)造器,故new接口名后的括號里不能傳入?yún)?shù)值。
如果通過繼承父類來創(chuàng)建匿名內(nèi)部類時,匿名內(nèi)部類將擁有和父類相似的構(gòu)造器,此處的相似指的是擁有相同的形參列表。
2代碼
3運(yùn)行
購買了一個電子示波器,花掉了67.8
匿名內(nèi)部類的初始化塊...
購買了一個鍵盤,花掉了56.2
當(dāng)創(chuàng)建以Device為父類的匿名內(nèi)部類時,既可以傳入?yún)?shù),代表調(diào)用父類帶參數(shù)的構(gòu)造器;也可以不傳入?yún)?shù),代表調(diào)用父類無參數(shù)的構(gòu)造器。
當(dāng)創(chuàng)建匿名內(nèi)部類時,必須實(shí)現(xiàn)接口或抽象父類里的所有抽象方法。如果有需要,也可以重寫父類中的普通方法。
四實(shí)戰(zhàn)
1點(diǎn)睛
在Java8之前,Java要求被局部內(nèi)部類、匿名內(nèi)部類訪問的局部變量必須使用final修飾,從Java8開始這個限制取消了,Java8更加智能:如果局部變量被匿名內(nèi)部類訪問,那么該局部變量相對于自動使用了final修飾。
2代碼
3結(jié)果
8
4說明
Java8將這個功能稱為“effectivelyfinal”,它的意思是對于被匿名內(nèi)部類訪問的局部變量,可以用final修飾,也可以不用final修飾,但必須按照有final修飾的方式來使用——也就是一次賦值后,以后不能重新賦值。
以上就是動力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對“基礎(chǔ)學(xué)習(xí),Java中匿名內(nèi)部類原理與用法詳解”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請?jiān)诰€咨詢,有專業(yè)老師隨時為你服務(wù)。
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743