成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java 內(nèi)部類(10)

andong777 / 1738人閱讀

摘要:可以將一個類的定義放在另一個類的定義內(nèi)部,這就是內(nèi)部類。實際上,它標(biāo)記的是表達(dá)式的結(jié)束,只不過這個表達(dá)式正巧包含了匿名內(nèi)部類罷了。如果內(nèi)部類是嵌套在別的內(nèi)部類之中,只需直接將它們的名字加在其外圍類標(biāo)識符與的后面

可以將一個類的定義放在另一個類的定義內(nèi)部,這就是內(nèi)部類。

內(nèi)部類允許你把一些邏輯相關(guān)的類組織在一起,并控制位于內(nèi)部的類的可視性.

1.創(chuàng)建內(nèi)部類

創(chuàng)建:把類的定義置于外圍類的里面.

更典型的情況是,外部類將有一個方法,該方法返回一個只想內(nèi)部類的引用.

如果想從外部類的非靜態(tài)方法之外的位置創(chuàng)建某個內(nèi)部類的對象,那么必須知名這個對象的類型:OuterClassName.InnerClassName.

2.鏈接到外部類

當(dāng)生成一個內(nèi)部類的對象時,此對象能夠訪問其外圍對象的所有成員,而不需要任何特殊條件.

內(nèi)部類還擁有其外圍類的所有元素的訪問權(quán).

內(nèi)部類的對象只能在與其外圍類對象的相關(guān)聯(lián)的情況下才能被創(chuàng)建(在內(nèi)部類是非static類時).

3.使用.this與.new

如果你需要生成對外部類對象的引用,可以使用外部類的名字后面緊跟圓點和this.

必須使用外部類的對象來創(chuàng)建內(nèi)部類對象,使用.new語法:外部類對象的引用.new 內(nèi)部類().

如果創(chuàng)建嵌套類(靜態(tài)內(nèi)部類),那么就不需要對外部類對象的引用.

4.內(nèi)部類與向上轉(zhuǎn)型

將內(nèi)部類向上轉(zhuǎn)型為其基類/接口,得到的只是只想基類或接口的引用,所以能夠很方便地隱藏實現(xiàn)細(xì)節(jié).

5.在方法和作用域內(nèi)的內(nèi)部類

可以在一個方法里面或者在任意的作用域內(nèi)定義內(nèi)部類(理由:1.實現(xiàn)了某類型的接口,可以創(chuàng)建并返回對其的引用;2.要解決一個復(fù)雜的問題,想創(chuàng)建一個類來輔助解決方案,又不希望這個類是公共可用的).

局部內(nèi)部類:在方法的作用域內(nèi)(而不是在其他類的作用域內(nèi))創(chuàng)建一個完整的類。

局部內(nèi)部類不會出現(xiàn)命名沖突.

在任意的作用域內(nèi)定義內(nèi)部類,并不是說該類的創(chuàng)建時有條件的,它其實與別的類一起編譯過了.然而,在定義內(nèi)部類的作用域之外,它是不可用的,除此之外,它與普通的類一樣.

6.匿名內(nèi)部類

方法將返回值的生成與表示這個返回值的類的定義結(jié)合在一起,且這個類是匿名的.

如果匿名內(nèi)部類的基類需要一個有參數(shù)的構(gòu)造器,只需簡單地傳遞合適的參數(shù)給基類的構(gòu)造器即可.

在匿名內(nèi)部類末尾的分號,并不是用來標(biāo)記此內(nèi)部類結(jié)束的。實際上,它標(biāo)記的是表達(dá)式的結(jié)束,只不過這個表達(dá)式正巧包含了匿名內(nèi)部類罷了。因此,這與別的地方使用分號是一致的.

如果定義一個匿名內(nèi)部類,并且希望它使用一個在其外部定義的對象,那么編譯器會要求其參數(shù)引用是final的.

在匿名類中不可能有命名構(gòu)造器(因為它根本沒有名字),但通過實例初始化,就能夠達(dá)到為匿名內(nèi)部類創(chuàng)建一個構(gòu)造器的效果.

實例初始化的實際效果就是構(gòu)造器,但是不能重載實例初始化方法,所以僅有一個這樣的構(gòu)造器.

匿名內(nèi)部類既可以擴(kuò)展類,也可以實現(xiàn)接口,但是不能兩者兼?zhèn)?而且如果是實現(xiàn)接口,也只能實現(xiàn)一個接口.

使用匿名內(nèi)部類結(jié)合工廠方法模式.

7.嵌套類

如果不需要內(nèi)部類對象于其外圍對象之間有聯(lián)系,那么可以將內(nèi)部類聲明為static,這通常稱為嵌套類.

普通的內(nèi)部類對象隱式地保存了一個引用,指向創(chuàng)建它的外圍對象。然而,當(dāng)內(nèi)部類是static的時候,就不是這樣了.

1.要創(chuàng)建嵌套類的對象,并不需要其外圍類的對象;2.不能從嵌套類的對象中訪問非靜態(tài)的外圍類對象.

普通內(nèi)部類的字段與方法,只能放在類的外部層次上,所以普通的內(nèi)部類不能有static數(shù)據(jù)和static字段,也不能包含嵌套類。但是嵌套類可以包含所有這些東西.

在一個普通的(非static)內(nèi)部類中,通過一個特殊的this引用可以鏈接到其外圍類對象,嵌套類就沒有這個特殊的this引用,這使得它類似于一個static方法.

正常情況下,不能再接口內(nèi)部防止任何代碼,但嵌套類可以作為接口的一部分,甚至可以在內(nèi)部類中實現(xiàn)其外圍接口.

一個內(nèi)部類被嵌套多少層并不重要,它能透明地訪問所有它所嵌入的外圍類的所有成員.

8.為什么需要內(nèi)部類

每個內(nèi)部類都能獨立地繼承自一個(接口的)實現(xiàn),所以無論外圍類是否已經(jīng)繼承了某個(接口的)實現(xiàn),對于內(nèi)部類都沒有影響.

內(nèi)部類允許繼承多個非接口類型.

閉包(closure)是一個可調(diào)用的對象,它記錄了一些信息,這些信息來自于創(chuàng)建它的作用域.

通過內(nèi)部類提供的閉包功能完成回調(diào),比指針更靈活,更安全.

應(yīng)用程序框架(application framework)就是被設(shè)計用以解決某類兒童頂問題的一個類或一組類.

內(nèi)部類允許控制框架的完整實現(xiàn)是由單個的類創(chuàng)建的,從而使得實現(xiàn)的細(xì)節(jié)被封裝了起來.

9.內(nèi)部類的繼承

繼承自內(nèi)部類,當(dāng)要生成一個構(gòu)造器時,默認(rèn)的構(gòu)造器并不算好,而且不能只是傳遞一個指向外圍類對象的引用。此外,必須在構(gòu)造器內(nèi)使用:enclosingClassReference.super(),這樣才提供了必要的引用.

10.內(nèi)部類可以被覆蓋嗎

當(dāng)繼承了某個外圍類的時候,內(nèi)部類并沒有發(fā)生什么特別神奇的變化,這個兩個內(nèi)部類是完全獨立的兩個個體,各自在自己的命名空間內(nèi).

可以明確的繼承某個內(nèi)部類.

11.局部內(nèi)部類

局部內(nèi)部類可以重載構(gòu)造器,而匿名內(nèi)部類只能用于實例初始化.

使用局部內(nèi)部類的而不適用匿名內(nèi)部類的另一個理由:需要不知一個該內(nèi)部類的對象.

12.內(nèi)部類標(biāo)識符

每個類都會產(chǎn)生一個.class文件,其中包含了如何創(chuàng)建該類星星的對象的全部信息.內(nèi)部類也必須生成一個.class文件以包含它們的Class對象信息.

規(guī)則:外圍類的名字,加上"$",再加上內(nèi)部類的名字.

如果內(nèi)部類是匿名的,編譯器會簡單地產(chǎn)生一個數(shù)字作為其標(biāo)識符。如果內(nèi)部類是嵌套在別的內(nèi)部類之中,只需直接將它們的名字加在其外圍類標(biāo)識符與"$"的后面.

END

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/71594.html

相關(guān)文章

  • (Thinking in Java)第10內(nèi)部

    摘要:內(nèi)部類中也可以取得這個外部類對象引用。創(chuàng)建成員內(nèi)部類對象的時候需要外部類對象。另外在方法中的內(nèi)部類不能加等權(quán)限修飾符,只能加和修飾符??梢栽诮涌趦?nèi)部定義內(nèi)部類,而且他們即使沒有修飾,也會自動變成的。 Thinking in Java撈干貨,寫筆記 一、成員內(nèi)部類 1.最基本使用 public class Demo { class Contents{ privat...

    Brenner 評論0 收藏0
  • JAVA學(xué)習(xí)之路 (六) 面向?qū)ο笾庋b、繼承、多態(tài)

    摘要:面向?qū)ο笾庋b繼承多態(tài)封裝將類中的信息進(jìn)行隱藏在類的內(nèi)部,不允許外部程序信息直接訪問,而是只能通過該類的提供的方法來實現(xiàn)對隱藏信息的提供和訪問。與之對應(yīng),包含內(nèi)部類的類被稱為外部類。 面向?qū)ο笾庋b、繼承、多態(tài) 封裝 將類中的信息進(jìn)行隱藏在類的內(nèi)部,不允許外部程序信息直接訪問,而是只能通過該類的提供的方法來實現(xiàn)對隱藏信息的提供和訪問。 好處 只能隱藏規(guī)定的方法和數(shù)據(jù) 隱藏類的實現(xiàn)細(xì)節(jié),...

    wenhai.he 評論0 收藏0
  • Java編程思想》筆記10.內(nèi)部

    摘要:但遠(yuǎn)不止如此,內(nèi)部類了解外部類,并能與之通信。內(nèi)部類還擁有其外圍類的所有元素的訪問權(quán)。普通內(nèi)部類內(nèi)不能有域和方法。特點普通內(nèi)部類對象隱式的保存了外部類對象,但嵌套類并非如此。局部內(nèi)部類可以訪問當(dāng)前代碼塊內(nèi)的常量,以及此外圍類的成員。 點擊進(jìn)入我的博客 可以把一個類的定義放在另一個類的定義內(nèi)部,這就是內(nèi)部類。Java最晦澀的部分之一。內(nèi)部類看起來就像是一種代碼隱藏機(jī)制,將類只與其他類的...

    wslongchen 評論0 收藏0
  • Java編程基礎(chǔ)11——面向?qū)ο骭包&權(quán)限修飾符&匿名內(nèi)部

    摘要:外部類要訪問內(nèi)部類的成員,必須創(chuàng)建對象。前提存在一個類或者接口這里的類可以是具體類也可以是抽象類。 1.package關(guān)鍵字的概述及作用(了解) A:為什么要有包 將字節(jié)碼(.class)進(jìn)行分類存放 包其實就是文件夾 B:包的概述 舉例: 學(xué)生:增加,刪除,修改,查詢 老師:增加,刪除,修改,查詢 ... 方案1:按照功能分 com.heima.add ...

    Bryan 評論0 收藏0
  • Java程序設(shè)計筆記

    摘要:對象的自動清除對象回收是由垃圾回收線程負(fù)責(zé)方法可以要求系統(tǒng)進(jìn)行垃圾回收,僅僅是建議系統(tǒng)沒有析構(gòu)方法,但的有類似方法系統(tǒng)在回收時會自動調(diào)用對象的方法子類的方法可以在里面釋放系統(tǒng)資源,一般來說,子類的方法中應(yīng)該調(diào)用父類的方法。 對象的自動清除 對象回收是由垃圾回收線程負(fù)責(zé) System.gc()方法可以要求系統(tǒng)進(jìn)行垃圾回收,僅僅是建議系統(tǒng) java沒有析構(gòu)方法,但Object的final...

    microcosm1994 評論0 收藏0

發(fā)表評論

0條評論

andong777

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<