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

Java 內部類完全指南:成員、靜態、匿名、局部四大類型深度解析與實戰模式

     編輯:Java 程式設計入門

內部類是 Java 實現多重繼承、封裝實現細節、簡化回調編程的利器。本文系統講解四大內部類型別的語法、訪問規則、實例化方式,並透過設計模式實戰展示其核心價值。

1. 成員內部類

定義與特性

  • 定義在類內部、方法外部,無 static 修飾
  • 持有外部類引用,可直接訪問外部類所有成員(含 private)
  • 外部類需先實例化,再通過 outer.new Inner() 創建內部類對象

實例化語法

OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass();
// 或在外部類非靜態方法中直接 new InnerClass()

獲取外部類引用

OuterClass.this; // 在內部類中引用外部類實例

2. 靜態內部類(巢狀類)

核心差異

特性成員內部類靜態內部類
需外部類實例是否
訪問外部非靜態成員直接訪問不可直接訪問
可定義 static 成員否是
實例化語法outer.new Inner()new Outer.Inner()

適用場景

  • 工具類、Builder 模式、單例模式持有者
  • 不需依賴外部類實例狀態的邏輯封裝

3. 局部內部類

  • 定義在方法/程式碼塊內部
  • 僅在該作用域內可見,不可加訪問修飾符
  • 只能訪問 final 或「實際上 final」的局部變量(JDK 8+ 隱含 final)

4. 匿名內部類

語法糖本質

「繼承類/實現介面」+「實例化」合二為一,無類名,隱含向上轉型:

// 介面式
Runnable r = new Runnable() {
    @Override public void run() { System.out.println("執行中..."); }
};

// 繼承式
Thread t = new Thread() {
    @Override public void run() { for(int i=1;i<=5;i++) System.out.print(i); }
};
t.start();

// 參數式(典型回調場景)
button.setOnClickListener(new View.OnClickListener() {
    @Override public void onClick(View v) { /* 處理點擊 */ }
});

限制規則

  • 無構造器(可用實例初始化塊 {} 替代)
  • 不可定義 static 成員
  • 只能繼承一個類或實現一個介面
  • 隱含 final,不可被繼承

內部類核心價值:實現多重繼承

Java 單繼承限制下,內部類各自可繼承不同實現:

abstract class Reader { abstract void read(); }
abstract class Writer { abstract void write(); }

class Device {
    // 內部類分別繼承 Reader、Writer
    class USBReader extends Reader { void read() { /* USB讀取 */ } }
    class USBWriter extends Writer { void write() { /* USB寫入 */ } }
    
    // 對外暴露介面而非具體類
    public Reader getReader() { return new USBReader(); }
    public Writer getWriter() { return new USBWriter(); }
}

實戰案例:Android 線程與回調

// 匿名內部類簡化線程創建
new Thread(() -> {
    // 耗時操作
    runOnUiThread(() -> textView.setText("完成")); // 另一個匿名內部類
}).start();

總結選型指南

場景推薦類型
需訪問外部實例狀態、邏輯複雜成員內部類
獨立工具邏輯、單例持有者、Builder靜態內部類
方法內臨時邏輯、需捕獲 final 變量局部內部類
一次性實現介面/繼承、回調、事件監聽匿名內部類
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved