Java 內部類
(1)內部類定義
定義在類內部的類叫做內部類,縮小了可見性。
(2)內部類的分類
根據內部類的定義結構不同,可以把內部類分爲兩種:成員式和局部式;
成員式:定義的地方與成員變量和成員方法類似,就像類的一個成員一樣;
局部式:定義在方法體中,僅屬於局部範圍所有;
成員式內部類:可以分爲靜態內部類和成員內部類
局部式內部類:普通局部內部類和匿名內部類
(3)靜態內部類
無法訪問外部類的非靜態成員。它可以在沒有外部類對象的情況下,單獨創造一個內部類對象。
總結一下:靜態內部類相對於外部類來說,僅僅是包含關係,縮小了命名空間,完整類名中多了一個外部類的名稱。
在本質上是兩個獨立的類,JVM也不知道它們兩個有包含關係。(這一點也有可能被考察)
(4)成員內部類
必須等外部類創建對象後纔會被加載到JVM中,它屬於外部類的某個實例,因此可以訪問外部類的靜態和非靜態成員。
語法比較特殊
(5)局部內部類
本質上說,局部內部類也是獨立的類,只不過它的使用受到限制。不能使用static,只能訪問使用final和abstract關鍵字,僅可以訪問外部類帶有final關鍵字的局部變量,因爲它訪問的是一個字面量或鏡像,該局部變量已經不存在。但是可以訪問任意外部類對象的成員變量。
(6)匿名內部類
工作原理相當於局部內部類,只是沒有一個具體的名字而已,用法相當靈活,外部也無法直接使用它。
(7)爲什麼需要使用內部類
1) 內部類方法可以訪問該類定義所在作用域中的數據,包括私有的數據
2) 內部類可以對同一個包的其他類隱藏起來
3) 當想要定義一個回調函數且不想編寫大量代碼時,使用匿名內部類比較便捷
要與c++中的嵌套類區分開,嵌套類的兩個好處:
1) 命名控制
2) 訪問控制