java中的內部類
目錄
- java中的內部類
- 1.定義
- 2.分類
- 非靜態成員式的內部類
- 區域性內部類
- 匿名內部類
- 靜態成員式內部類
- 總結
1.定義
- 內部類是一個定義在另一個類中的類
- 內部類可以把一些資料統一的隱藏起來,從而增強物件導向的封裝性
2.分類
-
非靜態成員式的內部類
- 非靜態成員式內部類可以訪問該類定義所在的作用域中的所有資料,方法,包括私有資料
- 非靜態成員式內部類不能宣告static成員
- 非靜態成員式內部類不能在該類定義靜態方法中直接使用
- 訪問非靜態成員式內部類:外部類名.內部類 變數 = new 外部類名().new 內部類名()
- 非靜態成員式內部類可以實現多繼承
-
區域性內部類
- 區域性內部類定義在程式碼塊、方法體內
- 區域性內部類不能使用,private,public,protected,static修飾
- 區域性內部類作用域僅限於當前方法中
- 區域性內部類和非靜態成員式內部類一樣,不能擁有靜態成員
- 區域性內部類訪問的區域性變數必須是final修飾的,java8以後會自動新增上隱藏式的final
-
匿名內部類
- 匿名區域性內部類
public abstract class Person { public abstract void sleep(); }
public class Student extends Person { @Override public void sleep() { System.out.println("學生睡覺"); } }
public class Test { public static void main(String[] args) { Person p1 = new Person() { @Override public void sleep() { System.out.println("學生睡覺"); } }; p1.sleep(); Person p2 = new Student(); p2.sleep(); } }
在上面的程式碼中p1物件和p2物件一樣,但是p1物件只能使用一次
- 匿名內部類使用前提,必須繼承一個父類,或者去實現一個介面
-
靜態成員式內部類
- 靜態內部類,場景:如果一個類只想把另一個類隱藏起來,而不想引用外部類物件,類似於工具類
- 訪問靜態內部類的方法:外部類名.內部類名 = new 外部類名.內部類名()
- 靜態成員式內部類建立例項物件的時候不必建立外部類物件
- 靜態成員式內部類可以直接訪問外部類的靜態成員,不能直接訪問外部類的非靜態成員
- 外部類可以透過完整的類名直接訪問靜態內部類的靜態成員
總結
內部類的出現是為了減少一個類的使用,即:如果該類只會使用一次,並且他的父類或者要實現的介面,那麼就可以方便的使用內部類,這樣可以讓程式碼的結構更加緊湊