一般情況下,我們把類定義成獨立的單元。有些情況下,我們把一個類放在另一個類的內部定義,稱為內部類。
內部類的作用:
內部類的使用場合:
由于內部類提供了更好的封裝特性,并且可以很方便的訪問外部類的屬性。所以,通常內部類在只為所在外部類提供服務的情況下優先使用。
成員內部類
(可以使用PRivate、protected、public等任意進行修飾,如成員變量一般。類文件:外部類$內部類.class)
a) 非靜態內部類 (外部類里使用非靜態內部類和平時使用其他類沒什么不同)
i. 非靜態內部類必須寄存在一個外部類對象里。因此,如果有一個非靜態內部類對象,那么一定存在對應的外部類對象。非靜態內部類對象單獨屬于外部類的某個對象。
ii. 非靜態內部類可以使用外部類的成員,但是外部類不能直接訪問非靜態內部類成員。
iii. 非靜態內部類不能有靜態方法、靜態屬性、靜態初始化塊。
iv. 靜態成員不能訪問非靜態成員:外部類的靜態方法、靜態代碼塊不能訪問非靜態內部類,包括不能使用非靜態內部類定義變量、創建實例。
v. 成員變量訪問要點:
- 內部類里方法的局部變量:變量名
- 內部類屬性:this.變量名
- 內部類屬性:外部類名.this.變量名
vi. 內部類的訪問:
- 外部類中使用內部類:new InnerClass()
- 外部類以外的地方使用非靜態內部類:Outer.Inner var_name = OuterObject.new Inner()
b) 靜態內部類
i. 定義方式:
static class ClassName {
// 類體
}
ii. 使用要點:
- 當一個靜態內部類對象存在,并不一定存在對應的外部類對象。因此,靜態內部類的實例方法不能直接訪問外部類的實例方法。
- 靜態內部類看做外部類的一個靜態成員。因此,外部類的方法中可以通過:靜態內部類.名字訪問靜態內部類的靜態成員。通過 new 靜態內部類() 訪問靜態內部類的實例。
- 在外部類的外面創建靜態內部類:
Outer.StaticInner sInner = new Outer.StaticInner();
匿名內部類
適合那種只需要使用一次的類。比如:鍵盤監聽操作等等。語法:
new 父類構造器(實參列表) 實現接口() {
//匿名內部類類體!
}
局部內部類
定義在方法內部。作用域只限于本方法。用的非常少。
新聞熱點
疑難解答