本文系統整理了 Java 進階類設計的核心知識點,涵蓋抽象類、final 關鍵字、四種嵌套類、枚舉類型、介面演進以及 Lambda 表達式,適合準備 OCPJP 8 認證或希望深化 Java 基礎的開發者。
抽象類用於定義包含部分通用實現的抽象。關鍵規則:
abstract 可修飾類與非靜態方法,不可修飾欄位或靜態方法。不可被繼承。主要目的:防止行為被覆寫改變、提升效能(編譯期解析、支援內聯)。JDK 中 String、System、包裝類皆為 final。
定義在另一個類或介面內部的類稱為嵌套類。四種風味:
| 類型 | 靜態 | 位置 | 特點 |
|---|---|---|---|
| 靜態嵌套類 | 是 | 類/介面成員 | 僅能訪問外部靜態成員;可獨立實例化;可含靜態成員 |
| 內部類 | 否 | 類成員 | 與外部實例綁定;可訪問外部所有成員(含 private);不可含靜態成員 |
| 區域內部類 | 否 | 程式碼區塊(方法/建構子/初始化區塊) | 非成員;僅在區塊內可見;可訪問 effectively final 區域變數 |
| 匿名內部類 | 否 | new 運算式中 | 無名稱;無建構子;常用於事件處理、函式式介面實作 |
OuterClass.NestedClass。public static final,不可被繼承;隱含繼承 java.lang.Enum。==;name() 返回常數名,valueOf() 反向查找。new 建立實例。values() 返回所有常數陣列;常數不可克隆。public static final;方法預設 public abstract。EventListener)。@Override 可標註覆寫介面方法。default)提供實作,子類可覆寫;不可為 final/synchronized。static)屬於介面本身,不可被覆寫,亦不可為 abstract/default。(參數列表) -> { 方法體 }
// 或
參數 -> 表達式
Lambda 可引用外部區域變數,但該變數必須是 final 或 effectively final(編譯器視為 final,若修改則報錯)。行為與匿名/區域類一致。
::)為 Lambda 簡寫形式。參考教材:《Oracle Certified Professional Java SE 8 Programmer Exam 1Z0-809: A Comprehensive OCPJP 8 Certification Guide》作者 S G Ganesh 等,ISBN 978-1-4842-1835-8。建議結合實際編碼練習,特別關注介面預設/靜態方法與 Lambda 的型別推斷規則。