更新時間:2020-02-05 09:19:58 來源:動力節(jié)點 瀏覽2484次
內(nèi)部類
可以將一個類定義放在另一個類的定義內(nèi)部,這就是內(nèi)部類。
創(chuàng)建內(nèi)部類
如果想從外部類的非靜態(tài)方法之外的任意位置創(chuàng)建某個內(nèi)部類的對象,那么必須具體地指明這個對象的類型:OuterClassName.InnerClassName(外部類名.內(nèi)部類名)。
鏈接到外部類
當(dāng)生成一個內(nèi)部類的對象時,此對象與制造它的外圍對象之間就有了一種聯(lián)系,所以它能訪問其外為對象的所有成員,而不需要任何特殊條件。此外,內(nèi)部類還擁有其外圍類的所有元素的訪問權(quán)。
所有內(nèi)部類自動擁有對其外圍類所有成員的訪問權(quán)。這是如何做到的呢?當(dāng)某個外圍類的對象創(chuàng)建了一個內(nèi)部類對象時,此內(nèi)部類對象必定會秘密地捕獲一個指向那個外圍類對象的引用。然后,在你訪問此外圍類的成員時,就是用那個引用來選擇外圍類的成員。幸運的是,編譯器會幫你處理所有的細(xì)節(jié),但你現(xiàn)在可以看到:內(nèi)部類的對象只能在與其外圍類的對象相關(guān)聯(lián)的情況下才能被創(chuàng)建(就像你應(yīng)該看到的,在內(nèi)部類是非static類時)。構(gòu)建內(nèi)部類對象時,需要一個指向其外圍類對象的引用,如果編譯器訪問不到這個引用就會報錯。不過絕大多數(shù)時候這都無需程序員操心。
使用.this與.new
如果你需要生成外部類對象的引用,可以使用外部類的名字后面緊跟遠(yuǎn)點和this。
publicclassDotThis{
voidf(){System.out.println("DotThis.f()");}
publicclassInner{
publicDotThisouter(){
returnDotThis.this;
}
}
publicInnerinner(){
returnnewInner();
}
publicstaticvoidmain(String[]args){
DotThisdt=newDotThis();
DotThis.Innerin=dt.inner();
in.outer().f();
}
}
要創(chuàng)建某個內(nèi)部類的對象,你必須在new表達(dá)式中提供其他外部類的對象的引用個,這里需要使用.new方法。
publicclassDotNew{
publicclassInner{
publicintf(){
return11;
}
}
publicstaticvoidmain(String[]args){
DotNewdt=newDotNew();
DotNew.Innerin=dt.newInner();
System.out.println(in.f());
}
}
由上可以總結(jié)出創(chuàng)建內(nèi)部類對象有兩種途徑:
1)在內(nèi)部類創(chuàng)建一個方法,該方法指向內(nèi)部類的一個引用,如代碼一中的inner()方法:
publicInnerinner(){
returnnewInner();
}
2)使用.new創(chuàng)建一個內(nèi)部類對象,如代碼二中:
DotNewdt=newDotNew();
DotNew.Innerin=dt.newInner();
內(nèi)部類與向上轉(zhuǎn)型
當(dāng)將內(nèi)部類向上轉(zhuǎn)型為其基類,尤其是轉(zhuǎn)型為一個接口的時候,內(nèi)部類就有了用武之地。(從實現(xiàn)了某個接口的對象,得到對此接口的引用,與向上轉(zhuǎn)型為這個對象的基類,實質(zhì)上效果是一樣的。)這是因為此內(nèi)部類----某個接口的實現(xiàn)----能夠完全不可見,并且不可用。所得到的只是指向基類或者接口的引用,所以能夠很方便地隱藏實現(xiàn)細(xì)節(jié)。
如果客戶端程序員想了解或訪問這些成員,那是要受到限制的。實際上,甚至不能向下轉(zhuǎn)型成為private內(nèi)部類(或protected內(nèi)部類,除非是繼承自它的子類),因為不能訪問其名字,就像在TestParcel類中看到的那樣。于是,private內(nèi)部類給類的設(shè)計者提供了一種途徑,通過這種方式可以完全阻止任何依賴于類型的編碼,并且完全隱藏了實現(xiàn)的細(xì)節(jié)
可以在一個方法里面或者在任意的作用域定義內(nèi)部類。這么做有倆個理由:
1)如前面所講,你實現(xiàn)了某類型的幾口,于是可以創(chuàng)建并返回對其的引用
2)你要解決一個復(fù)雜的問題,想創(chuàng)建一個類輔助你的解決方案,但是又不想這個類是公共可用的。
動力節(jié)點Javase相關(guān)視頻免費下載學(xué)習(xí)
Javase視頻教程【301集】:http://www.dabaquan.cn/v104/
Java視頻下載【JavaSE進階】:http://www.dabaquan.cn/v61/
以上就是動力節(jié)點Java培訓(xùn)機構(gòu)小編介紹的“Javase基礎(chǔ)-內(nèi)部類,內(nèi)涵全套免費視頻教程”的內(nèi)容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。
相關(guān)內(nèi)容
最新Java學(xué)習(xí)路線(適用于初學(xué)者)
系統(tǒng)學(xué)習(xí)Java后端開發(fā)線路
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743