首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 內部類完整指南:定義規則、訪問權限、靜態內部類與實例化語法

     編輯:Java 綜合教學

內部類基礎訪問規則

  1. 內部類可直接訪問外部類所有成員(含 private),因為編譯器隱式持有外部類引用:OuterClass.this。
  2. 外部類訪問內部類必須建立內部類實例。

成員內部類的實例化語法

// 非靜態成員內部類
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();  // 必須依賴外部類實例

// 靜態內部類
Outer.StaticInner staticInner = new Outer.StaticInner();  // 無需外部類實例

修飾符對內部類的影響

修飾符效果訪問限制
private封裝於外部類內部,外部不可直接實例化僅外部類內部可 new
protected / default / public控制外部類可見性同包/子類/全局可見
static成為靜態內部類(巢狀類)只能直接訪問外部類 static 成員;可獨立實例化

靜態內部類訪問示例

class Outer {
    private static int x = 3;
    static class Inner {
        static void func() { System.out.println("inner: " + x); }
    }
    static class Inner2 {
        void show() { System.out.println("inner2 show"); }
    }
    public static void method() {
        Inner.func();           // 靜態方法直接呼叫
        new Inner2().show();    // 非靜態方法需實例化
    }
}

// 外部類調用
Outer.method();                    // 呼叫靜態方法
Outer.Inner.func();                // 直接呼叫靜態內部類的靜態方法
new Outer.Inner2().show();         // 實例化非靜態內部類並呼叫實例方法

關鍵限制規則

  • 內部類定義了 static 成員(欄位/方法),該內部類必須宣告為 static。
  • 外部類的 static 方法訪問內部類時,該內部類必須是 static。
  • 非靜態內部類實例隱含持有外部類實例引用,可能導致外部類無法被 GC 回收(記憶體洩漏風險)。

區域內部類與匿名內部類(補充)

  • 區域內部類:定義在方法/代碼塊內,只能訪問 final 或 effectively final 的區域變數。
  • 匿名內部類:無名稱、繼承類或實現介面、現場定義、現場實例化,常用於事件監聽、執行緒建立等場景。

設計建議

  1. 內部類邏輯緊耦合外部類、且不需外部複用時使用。
  2. 需獨立複用、或避免持有外部引用時,優先考慮 static 內部類或提升為頂層類。
  3. 匿名內部類方法不超過 3 個,超過則改為具名類別提升可讀性。

掌握內部類的實例化語法、修飾符語義與訪問規則,能寫出封裝性更好、記憶體更安全的 Java 程式碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved