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

冒號和他的學生們(連載 26)——訪問控制:從語法到客戶意識的修煉

     編輯:Java 相關知識

第 26 課系統講解訪問修飾符在 C++、Java、C# 中的異同,確立「盡可能使用限制性更強的修飾符」原則,深入剖析域成員與方法成員的訪問選擇策略,並昇華至「客戶意識」與「接口責任感」的工程師素質層面。

三大語言訪問修飾符對照表

訪問範圍C++JavaC#
無限制publicpublicpublic
子類或同一包/程序集—protectedprotected internal
同一類或子類protectedprivate protected (已棄用)protected
同一包/程序集—package (默認)internal
同一類private (默認)privateprivate (默認)

關鍵差異:Java protected = 子類 + 同包,等同 C# protected internal;C++/C# protected 僅子類可見,等同 Java 已棄用的 private protected。

修飾符選擇核心原則

  1. 原則一:越嚴格越好。必要時再放寬;收緊會破壞客戶代碼。
  2. 域成員原則私有。除非是純數據載體或內部類,否則域不應暴露(狀態封裝、結構易變、接口應為行為)。
  3. 方法成員分層服務:
    • public:對所有類提供核心服務(抽象接口)
    • 抽象類 可有 protected 服務子類
    • package/internal:僅模塊內部協作(較少見)
    • private:實現細節,非服務,改動不影響客戶
  4. 非抽象類慎用 protected:一般不建議繼承非抽象類。

訪問控制與軟件應變成本

修改影響半徑與訪問層級正相關:

  • private:僅本類,重構成本最低
  • package/internal:包內可控
  • protected:涉及子類,若類為 public 則跨包,難以掌控
  • public:任意類可調用,修改代價最高,責任最大

成熟工程師對 public/protected 接口設計「慎之又慎」,投入精力遠超具體實現代碼。

@Deprecated / @Obsolete:不得已的下策

接口必須變更時,標記棄用並保留舊版本一段時間,給客戶遷移緩衝期——這是設計者對使用者的致歉。

客戶意識:程序員的核心素質

客戶定義:調用你代碼的代碼或編寫者(中間消費者),非終端用戶。
缺乏原因:

  1. 多為小團隊/自用代碼,未嘗設計不當之苦
  2. 習慣「自彈自唱」,角色多為調用者而非服務提供者
  3. 過程式思維(自頂向下)主導,OOP 鼓勵自底向上(先設計被調用的類)

培養途徑:

  • 謹記「輕諾必寡信」,無明確職責不輕易公開
  • 莫以自身之便致客戶之不便,莫以一時之便致長期之不便
  • 編寫單元測試:測試代碼是最典型的客戶代碼,能倒逼接口設計優化

本章金句

「訪問控制不僅是語法限制,也是語義規范——標有 public 的接口對閱讀者比文檔更正式直觀。」「合法指合乎語法,合理指合乎語義。法律是社會秩序的最低限度,一個只守法律不守規范的人必與社會格格不入。」
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved