Java內部類是在一個類的內部定義的另外一個類,可以理解為類中的一個成員,與屬性和方法處於同一層級。Java內部類是Java語言的特性之一,具有許多優秀的特性和應用場景。
為什麼使用Java內部類?
Java內部類為Java提供了一種強大的機制,可以解決許多設計問題。在Java中,內部類主要有如下三種使用場景:
1. 匿名內部類
匿名內部類(Anonymous Inner Class),顧名思義,就是在創建對象時,不需要給對象一個明確的名字。這是Java內部類的一種專門用途,可以用於實現一個介面或擴展一個類,並實現其中的抽象方法。
示例代碼:
public class AnonymousInnerClass { public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { // do something } }).start(); } }
上述代碼中,創建了一個線程,並通過匿名內部類的方式實現了Runnable介面中的run()方法。
2. 成員內部類
成員內部類(Member Inner Class)是定義在另外一個類中的類,可以訪問外部類的所有成員變數和方法。成員內部類也可以被修飾為public、protected、private或默認訪問許可權
示例代碼:
public class Outer { private int outerVar = 1; public void test() { Inner inner = new Inner(); inner.print(); } class Inner { private int innerVar = 2; public void print() { System.out.println("outerVar = " + outerVar); System.out.println("innerVar = " + innerVar); } } }
上述代碼定義了一個Outer類和一個Inner類,Inner類是Outer類的一個成員,Inner類可以訪問Outer類的私有成員outerVar,並且在test()方法中訪問Inner類的print()方法。
3. 局部內部類
局部內部類(Local Inner Class)是定義在方法或代碼塊中的內部類,它們只在所在方法或代碼塊中可見,並且不能被public、protected、private或static修飾。局部內部類通常用於實現一個方法或代碼塊內的一段邏輯。
示例代碼:
public class LocalInnerClass { public void test() { class Inner { private int innerVar = 2; public void print() { System.out.println("innerVar = " + innerVar); } } Inner inner = new Inner(); inner.print(); } }
上述代碼定義了一個LocalInnerClass類和一個Inner類,Inner類是LocalInnerClass類test()方法中的一個局部內部類,只能在test()方法內部使用。
內部類和外部類的訪問
Java內部類和外部類的訪問規則比較特殊,它們之間可以互相訪問對方的私有成員變數和私有方法。
示例代碼:
public class Outer { private int outerVar = 1; public void test() { Inner inner = new Inner(); System.out.println(inner.innerVar); inner.print(); } class Inner { private int innerVar = 2; public void print() { System.out.println("outerVar = " + outerVar); } } }
上述代碼中,Inner類可以訪問Outer類中的outerVar成員變數,並在print()方法中輸出outerVar的值。
總結
Java內部類是Java語言的一項重要特性,它可以規避許多設計難題,並且提供了一種實用的模板化編程機制。在選擇使用內部類時,需要根據業務場景,選擇匿名內部類、成員內部類或局部內部類,合理利用內部類的特性和優點,提高編程效率。
原創文章,作者:NZDU,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/132790.html