今天複習一下Java裡面一個比較重要的概念 內部類 局部內部類 內部類是定義在一個類的內部。通常是在方法中。 本質還是一個類,可以訪問外部類的所有成員,包含私有的。 不能使用訪問修飾符。但是可以使用final修飾符。 作用域盡在定義它的方法或者代碼塊中。 外部其他類不能訪問局部內部類(因為局部內部類 ...
今天複習一下Java裡面一個比較重要的概念 內部類
局部內部類
- 內部類是定義在一個類的內部。通常是在方法中。
- 本質還是一個類,可以訪問外部類的所有成員,包含私有的。
- 不能使用訪問修飾符。但是可以使用final修飾符。
- 作用域盡在定義它的方法或者代碼塊中。
- 外部其他類不能訪問局部內部類(因為局部內部類的地位就是衣個局部變數)。
- 如果外部類和局部類的成員變數重名。遵守就近原則。如果要訪問外部類變數。 可以通過 類型.this.成員 去訪問。
匿名內部類
- 該類沒有名字。
- 是一個對象。
- 定義外部類的局部位置,比如方法中,並且沒有類名。(系統底層會分配一個類型)。
- 匿名內部類使用一次就沒了(生成的對象是可以多次使用)。
- 匿名內部類是為了簡化開發。
1 package anonymous; 2 3 public class InnerClass { 4 public static void main(String[] args) { 5 new Test().run(); 6 } 7 } 8 9 10 class Test { 11 12 public void run() { 13 Animal dog = new Animal() { 14 @Override 15 public void Say() { 16 System.out.println("小狗汪汪"); 17 System.out.println(this.getClass()); 18 } 19 }; 20 dog.Say(); 21 } 22 } 23 24 25 interface Animal { 26 void Say(); 27 }
----------
輸出結果。
小狗汪汪
class anonymous.Test$1
成員內部類
- 定義為的位置是成員位置。
- 外部其他類可以調用成員內部類。
1 package anonymous; 2 3 public class MemberInnerClass { 4 public static void main(String[] args) { 5 Test01 test01 = new Test01(); 6 Test01.InnerClass innerClass = test01.new InnerClass(); 7 innerClass.Run(); 8 } 9 } 10 11 class Test01 { 12 13 class InnerClass { 14 public void Run() { 15 System.out.println("這是成員內部類"); 16 } 17 } 18 }
靜態內部類
- 靜態內部類還是定義在成員位置,但是他有static修飾。
- 可以直接訪問外部類的所有靜態成員,包括私有的。但是不能直接訪問非靜態的成員。
千里之行始於足下。