更新時(shí)間:2020-05-08 16:52:25 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽5379次
什么是內(nèi)部類?
內(nèi)部類,顧名思義,就是在一個(gè)類內(nèi)部創(chuàng)建的類。
那么,內(nèi)部類有哪些使用場(chǎng)景?
使用內(nèi)部類時(shí)有哪些坑?
內(nèi)部類的坑
在內(nèi)部類中的方法內(nèi)部,調(diào)用外圍類類名.this方法會(huì)返回當(dāng)前內(nèi)部類所連接的外圍類對(duì)象的引用,如下圖:
這有個(gè)很合理的解釋:內(nèi)部類如果使用了外部環(huán)境的狀態(tài),那么,內(nèi)部類加上創(chuàng)建它的外部環(huán)境,就叫做閉包。
什么時(shí)候會(huì)用到內(nèi)部類?
隱藏某些實(shí)現(xiàn)、多繼承、單元測(cè)試、閉包問(wèn)題(即如果一個(gè)類繼承了某個(gè)父類,這個(gè)類還想實(shí)現(xiàn)一個(gè)接口,但是父類和這接口有些方法或?qū)傩杂袥_突,想把父類和接口的功能都保留下來(lái),那么,就可以用內(nèi)部類來(lái)配合,用接口加內(nèi)部類來(lái)實(shí)現(xiàn)閉包)
繼承內(nèi)部類時(shí)有哪些坑?
繼承自內(nèi)部類時(shí),使用默認(rèn)的構(gòu)造器會(huì)報(bào)錯(cuò),因?yàn)閮?nèi)部類會(huì)默認(rèn)的獲得指向其外部類對(duì)象的引用,所以繼承內(nèi)部類時(shí)應(yīng)該在構(gòu)造器參數(shù)中傳遞一個(gè)其外部類對(duì)象的引用(編譯器要求你一定要這樣做),然后在構(gòu)造器中使用該外部類對(duì)象引用的super方法(該super方法調(diào)用的是這個(gè)外部類對(duì)象的內(nèi)部類的構(gòu)造方法)。如果父類和接口都有一個(gè)方法,他們的方法簽名相同,那么子類中的這個(gè)方法,既是父類方法的重寫(xiě)又是接口方法的實(shí)現(xiàn)。如下面2個(gè)圖,
內(nèi)部類的構(gòu)造器和其他方法都會(huì)默認(rèn)傳遞一個(gè)外圍類對(duì)象做參數(shù),如:
去掉這個(gè)內(nèi)部類的無(wú)參構(gòu)造器時(shí),則用反射獲取不到其構(gòu)造器(即,不顯式的定義內(nèi)部類構(gòu)造器,使用反射就獲取不到內(nèi)部類的構(gòu)造器【有參無(wú)參均獲取不到】),顯式的定義一個(gè)無(wú)參構(gòu)造器,則可以獲取到使用了外部類對(duì)象當(dāng)做其默認(rèn)參數(shù)的內(nèi)部類構(gòu)造器。
以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java內(nèi)部類的使用場(chǎng)景,使用時(shí)有哪些坑?”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743