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

Java 進階類設計:抽象類、final、嵌套類、枚舉、介面與 Lambda 完整指南

     編輯:Java 綜合教學

Java 進階類設計:抽象類、final、嵌套類、枚舉、介面與 Lambda 完整指南

本文系統整理了 Java 進階類設計的核心知識點,涵蓋抽象類、final 關鍵字、四種嵌套類、枚舉類型、介面演進以及 Lambda 表達式,適合準備 OCPJP 8 認證或希望深化 Java 基礎的開發者。

一、抽象類

抽象類用於定義包含部分通用實現的抽象。關鍵規則:

  • abstract 可修飾類與非靜態方法,不可修飾欄位或靜態方法。
  • 抽象類可繼承另一抽象類或實作介面;甚至可繼承具體類(但不推薦)。
  • 抽象類可無抽象方法;但若含抽象方法,類必須宣告為 abstract。
  • 子類必須實作所有繼承的抽象方法,否則子類也必須是抽象類。

二、final 關鍵字

final 類

不可被繼承。主要目的:防止行為被覆寫改變、提升效能(編譯期解析、支援內聯)。JDK 中 String、System、包裝類皆為 final。

final 方法與變數

  • final 方法不可被覆寫;非 final 類中仍可有 final 方法。
  • final 變數僅能賦值一次;未初始化者稱「空白 final」,須在所有建構子或初始化區塊中賦值。
  • final 參數在方法內不可修改。

重點

  • final 類的所有方法隱含 final。
  • final 變數若為物件參考,參考不可變,但物件內容可變。

三、嵌套類四大類型

定義在另一個類或介面內部的類稱為嵌套類。四種風味:

類型靜態位置特點
靜態嵌套類是類/介面成員僅能訪問外部靜態成員;可獨立實例化;可含靜態成員
內部類否類成員與外部實例綁定;可訪問外部所有成員(含 private);不可含靜態成員
區域內部類否程式碼區塊(方法/建構子/初始化區塊)非成員;僅在區塊內可見;可訪問 effectively final 區域變數
匿名內部類否new 運算式中無名稱;無建構子;常用於事件處理、函式式介面實作

靜態嵌套類要點

  • 語法:OuterClass.NestedClass。
  • 介面內定義的嵌套類/介面隱含 public static。
  • 可宣告 abstract/final,可繼承/被繼承,可含靜態成員。
  • 外部類可透過嵌套類實例訪問其 private 成員。

內部類要點

  • 每個內部類實例隱含持有外部類實例引用。
  • 不可宣告靜態成員(編譯錯誤)。
  • 可繼承類、實作介面;也可被其他類繼承。

區域與匿名內部類

  • 區域類不可為 static,不可在介面中定義。
  • 匿名類無法顯式 extends/implements;直接在 new 運算式中定義主體。
  • 兩者皆只能捕獲 final 或 effectively final 區域變數。

四、枚舉類型

  • 隱含 public static final,不可被繼承;隱含繼承 java.lang.Enum。
  • 枚舉常數為該枚舉類的實例;可比較用 ==;name() 返回常數名,valueOf() 反向查找。
  • 類內定義的枚舉隱含 static;不可用 new 建立實例。
  • values() 返回所有常數陣列;常數不可克隆。
  • 優點:型別安全、避免魔術數字、提升可讀性。

五、介面演進

基礎規則

  • 介面不可實例化;可 extends 多個介面。
  • 欄位隱含 public static final;方法預設 public abstract。
  • 可為空介面(標記介面,如 EventListener)。
  • 巢狀介面可有 private/protected 存取修飾詞。
  • 抽象類實作介面時可不實作方法,留待具體子類實作。
  • @Override 可標註覆寫介面方法。

Java 8 新增:預設方法與靜態方法

  • 預設方法(default)提供實作,子類可覆寫;不可為 final/synchronized。
  • 靜態方法(static)屬於介面本身,不可被覆寫,亦不可為 abstract/default。
  • 介面成員僅允許 public 存取。

六、Lambda 表達式

語法

(參數列表) -> { 方法體 }
// 或
參數 -> 表達式
  • 參數型別可推斷;單一參數可省略括號(但不可顯式宣告型別)。
  • 主體為單一表達式時可省略大括號與 return;區塊主體需显式 return。
  • 所有路徑必須返回值,否則編譯錯誤。

Effectively Final 變數

Lambda 可引用外部區域變數,但該變數必須是 final 或 effectively final(編譯器視為 final,若修改則報錯)。行為與匿名/區域類一致。

重點提醒

  • Lambda 僅可出現於賦值、方法呼叫、型別轉換等語境。
  • Lambda 視為巢狀區塊,不可宣告與外部區域變數同名的變數。
  • 若 Lambda 拋出受檢異常,對應函式式介面方法必須宣告該異常。
  • 方法參考(::)為 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 的型別推斷規則。

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