内部类(innerclasses)
一般情況下,我們把類定義成獨立的單元。有些情況下,我們把一個類放在另一個類的內(nèi)部定義為內(nèi)部類。
內(nèi)部類的作用:
1.內(nèi)部類提供了更好的封裝。只能讓外部類直接訪問,不允許同一個包中的其他類直接訪問。
2.內(nèi)部類可以直接訪問外部類的私有屬性,內(nèi)部類被當(dāng)成其外部類的成員。但外部類不能訪問內(nèi)部類的內(nèi)部屬性
內(nèi)部類的適用場合:
由于內(nèi)部類提供了更好的封裝特性,并且可以很方便的訪問外部類的屬性。所以,通常內(nèi)部類在只為所在外部類提供服務(wù)的情況下優(yōu)先使用。
?
內(nèi)部類的分類:
1.成員內(nèi)部類(可以使用private,proteted,public任意進行修飾。類文件:)
a)非靜態(tài)內(nèi)部類(外部類里使用非靜態(tài)內(nèi)部類和平時使用其他類沒什么不同)
i.非靜態(tài)內(nèi)部類必須寄存在一個外部類對象里。因此,如果一個非靜態(tài)內(nèi)部類對象那么一定存在對應(yīng)外部類對象。非靜態(tài)內(nèi)部類對象單獨屬于外部類的某個對象。
ii.非靜態(tài)內(nèi)部類可以使用外部類的成員,但是外部類不能直接訪問非靜態(tài)內(nèi)部類成員。
iii.非靜態(tài)內(nèi)部類不能有靜態(tài)方法,靜態(tài)屬性,和靜態(tài)初始化塊。
iv.靜態(tài)成員不能訪問非靜態(tài)成員:外部類的靜態(tài)方法,靜態(tài)代碼塊不能訪問非靜態(tài)內(nèi)部類,包括不能使用非靜態(tài)內(nèi)部類定義變量,創(chuàng)建實例。
v.成員變量的訪問要點:
1.內(nèi)部類里方法的局部變量:方法名
2.內(nèi)部類屬性:this.變量名
3.外部類屬性:外部類名.this.變量名
vi.內(nèi)部類的訪問:
1.外部類中定義內(nèi)部類:new innerClass();
2.外部類以外的地方使用非靜態(tài)內(nèi)部類:
Outer.inner varname=OuterObject.new Inner()
Face.Nose nose=new Face().new Nose();
Face f2=new Face();
Face.Nose nose2=f2.new Nose();
b)靜態(tài)內(nèi)部類:
i.定義方式:
static class ClassName{
//類體
}
ii.使用要點:
1.當(dāng)一個靜態(tài)內(nèi)部類對象存在,并不一定存在對應(yīng)的外部類對象。因此靜態(tài)內(nèi)部類的實例方法不能直接訪問外部類的實例方法。
2.靜態(tài)內(nèi)部類看作外部類的一個靜態(tài)成員。因此,外部類的方法中可以通過:靜態(tài)內(nèi)部類.名字 訪問靜態(tài)內(nèi)部類的靜態(tài)成員。通過new靜態(tài)內(nèi)部類()訪問靜態(tài)內(nèi)部類的實例。
2.匿名內(nèi)部類
適合哪種只需要使用一次的類。
new 父類構(gòu)造器(實參類表) 實現(xiàn)接口(){
//匿名內(nèi)部類類體
}
局部內(nèi)部類
定義在方法內(nèi)部。作用域只限于本方法。
?
轉(zhuǎn)載于:https://www.cnblogs.com/javatask/p/6789948.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的内部类(innerclasses)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bc8-android导航,路畅A6导航
- 下一篇: 字幕小工具 SubTool Releas