Java 提供四種訪問權限修飾符,通過控制類、屬性、方法的可見範圍,實現封裝、安全性與模組化設計。合理規劃權限邊界,是編寫健壯、可維護代碼的關鍵。
| 修飾符 | 同一類 | 同一包 | 不同包子類 | 不同包非子類 |
|---|---|---|---|---|
| private | ✓ | ✗ | ✗ | ✗ |
| default (無) | ✓ | ✓ | ✗ | ✗ |
| protected | ✓ | ✓ | ✓ | ✗ |
| public | ✓ | ✓ | ✓ | ✓ |
僅在當前類內部可訪問。適用於:內部實現細節、敏感字段、不希望被繼承或外部調用的輔助方法。典型模式:私有字段 + 公共 getter/setter 控制訪問邏輯。
不加修飾符即為默認權限。同一包內類可自由訪問,包外不可見。適用於:包內實現類協作、內部 API、測試代碼訪問。注意:接口中方法默認即為 public,無 default 概念。
同包可訪問 + 不同包子類可訪問。核心用途:允許子類覆寫或調用父類受保護成員,構建可擴展框架。常見誤區:以為 protected 僅對子類可見,實則同包類也可訪問。
無任何限制,構成類的對外契約。慎用:公共 API 一旦發布難以變更,應僅暴露必要接口,內部實現盡量隱藏。
防止外部直接修改對象內部狀態導致不一致。例如:銀行賬戶餘額字段若為 public,任意代碼可直接修改繞過轉賬邏輯;私有化後僅通過受控方法(含驗證、日誌、事務)操作。
內部實現變更不影響調用者。若字段改為計算屬性、引入緩存、變更存儲結構,僅需調整私有方法,公共接口保持穩定。
API 設計即文檔:public 方法代表「能做什麼」,private 方法代表「怎麼做」。清晰的權限劃分降低認知負擔,引導正確使用方式。
權限修飾符不是束縛,而是架構邊界的明確宣示。善用它們,讓代碼在演進中保持清晰、安全、可控。