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

善用內部類與匿名類優化 Java 代碼結構:封裝、回調、事件處理實戰

     編輯:Java 相關知識

內部類:邏輯歸屬的自然表達

  • 定義在另一個類內部,可 package/protected/private/public 修飾。
  • 非靜態內部類:持有外部類實例隱式引用,可直接訪問外部所有成員 (含 private)。實例化語法:Outer.this.new Inner() (外部類實例上下文中可省略 Outer.this)。
  • 靜態內部類:無外部實例引用,僅訪問外部靜態成員,行為同頂層類。
  • 方法局部內部類:不可訪問非 final 區域變數/參數。

經典案例:LinkedList 內部 Node 類

public class LinkedList {
    private Node head; // 只在 LinkedList 內部用,適合私有內部類
    private static class Node { Object val; Node next; }
    // ...
}

優點:封裝性強、同一文件易維護、避免產生大量微小頂層類檔案。

匿名類:一次性實現介面/擴展類的利器

  • 語法:new Interface/Class() { ... },編譯期生成類,運行期建立實例。
  • 本質是非靜態內部類,享有相同訪問權限 (需 final 區域變數)。
  • 適用場景:Swing 事件監聽器、Runnable、Comparator 等一次性實作。

Swing 匿名類雙例

// 1. 視窗關閉適配器
frame.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) { onClose(); } // 可訪問私有 onClose()
});

// 2. 按鈕動作監聽器
button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) { frame.dispose(); } // 訪問 final 區域變數 frame
});

總結

內部類提供「邏輯內聚、物理封裝」的中層組織單元;匿名類消除「為了一個介面寫一個類」的樣板碼。善用它們,代碼更內聚、文件更少、意圖更清晰。

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