封裝是面向對象三大特性之一,Java 提供四級訪問權限控制類、字段、構造器、方法的可見範圍。本文按權限從小到大系統講解 private、默認、protected、public 的適用對象、可見範圍與設計原則。
四級權限對比表
| 修飾符 | 關鍵字 | 可修飾對象 | 同類 | 同包其他類 | 不同包子類 | 不同包非子類 |
| 私有 | private | 字段、構造器、方法 | ✅ | ❌ | ❌ | ❌ |
| 默認(包私有) | (無) | 類、字段、構造器、方法 | ✅ | ✅ | ❌ | ❌ |
| 受保護 | protected | 字段、構造器、方法 | ✅ | ✅ | ✅ | ❌ |
| 公共 | public | 類、字段、構造器、方法 | ✅ | ✅ | ✅ | ✅ |
關鍵規則速記
- 類(外部類)只能
public 或默認,不能用 private/protected
- 所有修飾符都能修飾字段、方法、構造器
- 最小權限原則:字段優先
private,提供 public getter/setter;構造器視實例化策略決定;工具類構造器 private 防實例化
- 修飾的是「被訪問者」的權限,而非訪問者
設計場景決策樹
需要被任意類使用? → public
↓ 否
需要被子類繼承/覆寫? → protected
↓ 否
需要被同包協作類使用? → 默認
↓ 否
僅本類內部使用? → private
常見誤區
- 接口方法隱式
public abstract,不可降低權限
- 覆寫方法權限不能低於被覆寫方法(可放寬)
- 外部類默認權限導致不同包不可見,跨包使用須加
public
- 構造器
private 可實現單例、工具類、建造者模式
最佳實踐清單