內部類(innerclasses)
內部類
--把一個類放在另一個類的內部定義,稱為內部類。
內部類的作用:
--內部類提供了更好的封裝。只能讓外部類直接訪問,不允許同一個包中的其他類直接訪問。
--內部類可以直接訪問外部類的私有屬性,內部類被當成其外部類的成員。 但外部類不能訪問內部類的內部屬性。
--由於內部類提供了更好的封裝特性,並且可以很方便的訪問外部類的屬性。所以,通常內部類在只為所在外部類提供服務的情況下優先使用。
內部類的分類:
--成員內部類(可以使用private、proteted、public任意進行修飾。 類檔案:外部類$內部類.class)
--非靜態內部類
1、非靜態內部類必須寄存在一個外部類物件裡。因此,如果有一個非靜態內部類物件那麼一定存在對應的外部類物件。 非靜態內部類物件單獨屬於外部類的某個物件。 |
2、非靜態內部類可以使用外部類的成員,但是外部類不能直接訪問非靜態內部類成員。 |
3、非靜態內部類不能有靜態方法、靜態屬性、靜態初始化塊。 |
4、靜態成員不能訪問非靜態成員:外部類的靜態方法、靜態程式碼塊不能訪問非靜態內部類,包括不能使用非靜態內部類定義變數、建立例項。 |
5、成員變數訪問要點: --內部類裡方法的區域性變數:變數名 --內部類屬性:this.變數名 --外部類屬性:外部類名.this.變數名 |
6、內部類的訪問: --外部類中定義內部類: new InnerClass() --外部類以外的地方使用非靜態內部類:Outer.inner varname = OuterObject.new Inner() |
--靜態內部類
定義方式: static class ClassName { //類體 } |
使用要點: --當一個靜態內部類物件存在,並不一定存在對應的外部類物件。 因此,靜態內部類的例項方法不能直接訪問外部類的例項方法。 --靜態內部類看做外部類的一個靜態成員。 因此,外部類的方法中可以通過:靜態內部類.名字 訪問靜態內部類的靜態成員。通過 new 靜態內部類()訪問靜態內部類的例項。 --在外部類的外面建立靜態內部類 A.B aInner = new A.B(); |
--匿名內部類
--適合那種只需要使用一次的類。比如:鍵盤監聽操作等等。
語法:
new 父類構造器(實參類表) 實現介面 () {
//匿名內部類類體
}
--區域性內部類
--定義在方法內部。作用域只限於本方法。用的非常少。