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

《Thinking in Java》讀書筆記(六):存取控制與套件機制深度解析

     編輯:Java 相關知識

《Thinking in Java》第六章聚焦於「存取控制」,這是 Java 封裝特性的基石,也是打造健壯、可維護程式庫的關鍵。本文整理核心觀念,從套件組織到四種存取修飾符,層層深入。

核心設計哲學

「將會改變的事物,與保持不變的事物分離。」

這是物件導向設計的首要考量。存取修飾符的存在,正是為了讓類別設計者能夠控制哪些內部細節對外可見,哪些必須隱藏,從而實現「介面與實作分離」。

套件:管理命名空間的基本單元

為什麼需要套件?

解決類別命名衝突。透過「反轉網域名」慣例(如 com.company.project),確保全域唯一性。

編譯單元規則

  • 一個 .java 檔案最多只能有一個 public 類別。
  • public 類別名必須與檔案名完全一致(含大小寫)。
  • 同一編譯單元內的非 public 類別屬於「支援類別」,對外不可見。

匯入與 CLASSPATH

  • import 只是簡化命名,不影響執行效能。
  • CLASSPATH 指定 .class 檔搜尋根目錄;若為 JAR 檔,需在 CLASSPATH 中指定完整 JAR 路徑而非目錄。
  • package 宣告必須是檔案中第一行非註解程式碼。

四大存取修飾符詳細比較

修飾符同類別同套件(非子類別)不同套件子類別不同套件非子類別
private✅❌❌❌
default (package)✅✅❌❌
protected✅✅✅❌
public✅✅✅✅

private:封裝的核心

  • 僅限定義該成員的類別內部存取。
  • 允許自由修改實作細節,不影響同套件其他類別。
  • 多執行緒環境下,private 能減少共享可變狀態,降低競態條件風險。

protected:給子類別的特權

當基類別設計者希望衍生類別能存取某成員,但不想對全世界公開時使用。注意:不同套件的非子類別無法存取 protected 成員。

default (package-private):套件級別的協作

同一套件內的類別自動擁有存取權。這鼓勵將關聯緊密的類別歸入同一套件,形成內聚模組。

介面與實作分離

存取控制實質上是「實作隱藏」。它建立兩個邊界:

  1. 明確告知用戶端程式設計師「能用什麼、不能用什麼」。
  2. 將介面(public 方法)與實作細節(private 欄位/方法)分離,未來重構時不破壞用戶端代碼。

類別層級的存取控制

  • public 類別:任意處可建立實例。每個編譯單元最多一個。
  • default 類別:僅限同套件建立實例。
  • 類別不能宣告為 private 或 protected(內部類別除外)。
  • 若不想讓外部建立實例,可將所有建構子設為 private(單例模式常用手法)。

最佳實踐總結

  1. 預設全部 private,只暴露必要的 public 方法。
  2. 資料欄位永遠 private,透過存取子/修改子方法控制存取。
  3. 善用套件組織相關類別,利用 default 存取權簡化套件內協作。
  4. 謹慎使用 protected,僅在明確設計給繼承體系擴充時使用。

深入理解存取控制,是從「寫出能跑的代碼」進階到「設計優雅的 API」的必經之路。

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