java 編程思想筆記(六)——內部類。本站提示廣大學習愛好者:(java 編程思想筆記(六)——內部類)文章只能為提供參考,不一定能成為您想要的結果。以下是java 編程思想筆記(六)——內部類正文
1、定義
一個類的定義放在另一個類的內部,這個類就叫做內部類。
2、鏈接到外圍類
創建了內部類對象時,它會與創造它的外圍對象有了某種聯系,於是能訪問外圍類的所有成員,不需任何特殊條件。
那麼,它是如何實現的呢?
是這樣的,用外圍類創建內部類對象時,此內部類對象會秘密的捕獲一個指向外圍類的引用,於是,可以通過這個引用來訪問外圍類的成員。
通常,這些都是編譯器來處理,我們看不到,也不用關心這個。
正是因為如此,我們創建內部類對象時,必須與外圍類對象相關聯。
3、使用關鍵字.this與.new
.this關鍵字
內部類中得到當前外圍類對象的引用,可以使用.this關鍵字,注意與new的區別
使用.this後,得到時創建該內部類時使用的外圍類對象的引用,new則是創建了一個新的引用。
.new關鍵字
如果想直接創建一個內部類對象,而不是通過外圍類對象的方法來得到,可以使用.new關鍵字
必須是外圍類對象.new,而不能是外圍類.new
而且需要注意的是,在創建外圍類對象之前,不可能創建內部類的對象(嵌套類除外)。
4、內部類與向上轉型
將內部類向上轉型為基類型,尤其是接口時,內部類就有了用武之地。
5、方法內的類
可以在方法內創建一個類。
值得注意的是:方法內創建的類,不能加訪問修飾符。
另外,方法內部的類也不是在調用方法時才會創建的,它們一樣也被編譯了。
6、匿名內部類
匿名內部類後面的分號不可缺少!
匿名類,顧名思義,就是沒有名稱。
匿名類可以創建,接口,抽象類,與普通類的對象。創建接口時,必須實現接口中所有方法。
匿名內部類接受的參數必須為final修飾
如果不是final的,編譯器就會提示出錯。
另外,還可以在匿名內部類裡定義屬性
由於類是匿名的,自然沒有構造器,如果想模仿構造器,可以采用實例初始化({})
7、嵌套類
static的內部類就叫做嵌套類
使用嵌套類時有兩點需要注意:
a、創建嵌套類對象時,不需要外圍類
b、在嵌套類中,不能像普通內部類一樣訪問外圍類的非static成員
另外,嵌套類還有特殊之處,就是嵌套類中可以有static方法,static字段與嵌套類,而普通內部類中不能有這些。
8、內部類標識符
我們知道每個類會產生一個.class文件,文件名即為類名
同樣,內部類也會產生這麼一個.class文件,但是它的名稱卻不是內部類的類名,而是有著嚴格的限制:外圍類的名字,加上$,再加上內部類名字。
前面說到得定義在方法內的內部類,不是在調用方法時生成,而是與外圍類一同編譯,就可以通過查看.class文件的方式來證明。
9、為何要內部類?
a、內部類提供了某種進入外圍類的窗戶。
b、也是最吸引人的原因,每個內部類都能獨立地繼承一個接口,而無論外圍類是否已經繼承了某個接口。
因此,內部類使多重繼承的解決方案變得更加完整。
在項目中,需要多重繼承,如果是兩個接口,那麼好辦,接口支持多重繼承。
如果是兩個類呢?這時只有使用內部類了。