Thinking in Java 第十章內(nèi)部類(lèi)讀書(shū)筆記

1.本章上來(lái)第一句就說(shuō)了什么是內(nèi)部類(lèi),一個(gè)在類(lèi)的定義放在另一個(gè)的類(lèi)內(nèi)部。

2.內(nèi)部類(lèi)擁有外部類(lèi)其外圍類(lèi)的所有元素的訪問(wèn)權(quán),包括私有的。

3.當(dāng)某個(gè)外圍類(lèi)的對(duì)象創(chuàng)建了一個(gè)內(nèi)部類(lèi)對(duì)象時(shí),吃?xún)?nèi)部類(lèi)對(duì)象必定會(huì)秘密地捕獲一個(gè)指向那外圍類(lèi)對(duì)象的引用。然后在你訪問(wèn)此外圍類(lèi)的成員時(shí),就是用那個(gè)引用來(lái)選擇外圍類(lèi)的成員的。這些編譯器豆瓣我們做好了,我們可以之前看到的是,內(nèi)部類(lèi)的對(duì)象只能在于其外圍類(lèi)的對(duì)象相關(guān)聯(lián)的情況下被創(chuàng)建(在內(nèi)部類(lèi)是非 static 時(shí))。

4.在擁有外部類(lèi)對(duì)象之前不可能創(chuàng)建內(nèi)部類(lèi)對(duì)象,因?yàn)閮?nèi)部類(lèi)對(duì)象會(huì)隱式的持有外部類(lèi)對(duì)象的引用,而其實(shí)用 static 修飾的內(nèi)部類(lèi)叫嵌套類(lèi),嵌套類(lèi)不需要對(duì)外部類(lèi)對(duì)象的引用,這個(gè)我們后面會(huì)介紹到。

創(chuàng)建內(nèi)部類(lèi)對(duì)象

5.內(nèi)部類(lèi)的作用之一是隱藏代碼實(shí)現(xiàn),此外還有就是實(shí)現(xiàn)某個(gè)接口,從而向上轉(zhuǎn)型并返回對(duì)其的引用。

6.在方法的作用域內(nèi)創(chuàng)建的類(lèi),叫做局部?jī)?nèi)部類(lèi)。

局部?jī)?nèi)部類(lèi)

7.當(dāng)然在6的基礎(chǔ)上其實(shí)內(nèi)部類(lèi),可以放在任意的作用域內(nèi),例如:if 語(yǔ)句內(nèi)等等。

8.匿名內(nèi)部類(lèi),也就是沒(méi)有名字,作用是創(chuàng)建一個(gè)繼承自 A 的匿名類(lèi)的對(duì)象,然而如果我在匿名內(nèi)部類(lèi)創(chuàng)建的別的特性,在我向上轉(zhuǎn)型后,這些特性其實(shí)又消失掉了,因?yàn)檫@是一個(gè)沒(méi)有名字的類(lèi),所以也就無(wú)從談起它的向下轉(zhuǎn)型,而我向上轉(zhuǎn)型后也只是可以調(diào)用基類(lèi)的一些屬性,所以匿名內(nèi)部類(lèi)可以用來(lái)創(chuàng)建某個(gè)接口的實(shí)現(xiàn)類(lèi)等等。

匿名內(nèi)部類(lèi)使用

9.匿名內(nèi)部類(lèi)不可能有構(gòu)造器,因?yàn)樗B名字都沒(méi)有。

10.如果方法中的某個(gè)變量被匿名內(nèi)部類(lèi)使用到,那么就必須要加 final 前綴,前面的參數(shù)只是傳遞到了構(gòu)造中,所以無(wú)需 final,而后面的參數(shù)被匿名內(nèi)部類(lèi)使用,所以需要使用 final 修飾,我之前一直不是特別懂為什么,之前去網(wǎng)上查過(guò),記得好像是說(shuō),方法結(jié)束后,但是我依然需要使用那么變量,正常情況下, 方法的參數(shù)隨著方法調(diào)用的技術(shù)也就消失了,所以為了可以更長(zhǎng)時(shí)間的被引用著,即方法被銷(xiāo)毀后依然可以使用(可能說(shuō)的不對(duì),還是請(qǐng)自行 Google)。

在匿名內(nèi)部類(lèi)使用方法參數(shù)

11.嵌套類(lèi),書(shū)中是這么介紹嵌套類(lèi)的,如果不需要內(nèi)部對(duì)象與其外圍類(lèi)對(duì)象之間有聯(lián)系,那么就可以將內(nèi)部類(lèi)聲明為 static,這通常稱(chēng)為嵌套類(lèi)。

12.創(chuàng)建普通的內(nèi)部類(lèi)對(duì)象會(huì)隱式的持有一個(gè)外圍類(lèi)對(duì)象的引用,而嵌套類(lèi)不是,這也意味著:

(1)要?jiǎng)?chuàng)建嵌套類(lèi)的對(duì)象,并不要其外圍類(lèi)的對(duì)象。

(2)不能從嵌套類(lèi)的對(duì)象中訪問(wèn)非靜態(tài)的外圍類(lèi)對(duì)象。

13.其實(shí)嵌套類(lèi)使用了 static 修飾,也就說(shuō)明了它其實(shí)是獨(dú)立于對(duì)象的。

14.普通的內(nèi)部類(lèi)不能有 static 數(shù)據(jù)和 static 字段,也不能有嵌套類(lèi),而嵌套類(lèi)啥都能有。

15.接口中的內(nèi)部類(lèi)為嵌套類(lèi),因?yàn)榻涌谥械念?lèi)都被自動(dòng)的變成 public 和 static 的了。

16.為什么需要內(nèi)部類(lèi)?書(shū)中給了這樣的答案:每個(gè)內(nèi)部類(lèi)都能獨(dú)立的繼承自一個(gè)(接口的)實(shí)現(xiàn),所以不論外圍類(lèi)是否已經(jīng)繼承了某個(gè)(接口的)實(shí)現(xiàn),對(duì)于內(nèi)部類(lèi)都沒(méi)有影響。所以說(shuō)實(shí)在的還是使得多重繼承的解決方案變得更完整,接口已經(jīng)解決了部分問(wèn)題,而內(nèi)部類(lèi)有效地實(shí)現(xiàn)了“多重繼承”。

17.內(nèi)部類(lèi)可以有多個(gè)實(shí)例,每個(gè)實(shí)例都有自己的狀態(tài)信息,并且與外圍類(lèi)對(duì)象的信息想獨(dú)立。

18.在單個(gè)外圍類(lèi)中,可以讓多個(gè)內(nèi)部類(lèi)以不同的方式實(shí)現(xiàn)同一個(gè)接口,或繼承同一個(gè)可類(lèi)。

19.內(nèi)部類(lèi)的繼承使用,如果只是使用 Dot 默認(rèn)的無(wú)參構(gòu)造會(huì)報(bào)錯(cuò),而必須使用 Dot 繼承的內(nèi)部類(lèi)的外圍類(lèi)的對(duì)象作為構(gòu)造參數(shù),并通過(guò) super() 調(diào)用 DotNew 的構(gòu)造,使得 DotNew 得到初始化,這樣才能使得繼承的內(nèi)部類(lèi)有外圍類(lèi)引用,因?yàn)槲覀兌贾览^承的時(shí)候我們會(huì)先去執(zhí)行父類(lèi)的構(gòu)造,而內(nèi)部類(lèi)需要一個(gè)外圍類(lèi)的引用,所以就要先初始化內(nèi)部類(lèi)的外圍類(lèi),使得內(nèi)部類(lèi)的構(gòu)造得到正常的初始化(我是這么認(rèn)為的)。

內(nèi)部類(lèi)的繼承使用

20.局部?jī)?nèi)部類(lèi)與匿名內(nèi)部類(lèi)相比,局部?jī)?nèi)部類(lèi)可以有構(gòu)造器,而構(gòu)造器就可以讓我們進(jìn)行初始化。

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

相關(guān)閱讀更多精彩內(nèi)容

  • 可以將一個(gè)類(lèi)的定義放到另一個(gè)類(lèi)的定義內(nèi)部,這就是內(nèi)部類(lèi)。 10.1 創(chuàng)建內(nèi)部類(lèi) 如果想從外部類(lèi)的非靜態(tài)方法之外的任...
    張利強(qiáng)閱讀 1,120評(píng)論 0 2
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,740評(píng)論 18 399
  • 今天整理一下內(nèi)部類(lèi),其中包含了內(nèi)部類(lèi)的特殊形式,對(duì)比普通類(lèi)有什么區(qū)別和作用,內(nèi)部類(lèi)和外圍類(lèi)之間的聯(lián)系,內(nèi)部類(lèi)的擴(kuò)展...
    _小二_閱讀 815評(píng)論 0 3
  • 《Thinking In Java》內(nèi)部類(lèi) 定義:可以將一個(gè)類(lèi)的定義放在另一個(gè)類(lèi)的內(nèi)部,這就是內(nèi)部類(lèi)。 創(chuàng)建內(nèi)部類(lèi)...
    RonaldoWang閱讀 381評(píng)論 0 2
  • 第一章 對(duì)象導(dǎo)論 對(duì)象具有狀態(tài)、行為和標(biāo)識(shí)。這意味著每一個(gè)對(duì)象都可以擁有內(nèi)部數(shù)據(jù)和方法,并且每一個(gè)對(duì)象都可以唯一地...
    niaoge2016閱讀 1,038評(píng)論 0 0

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