Java 提供四種存取層級控制類別、欄位、方法與建構子的可見性:
| 修飾符 | 中文稱呼 | 同類 | 同包 | 子類(異包) | 非子類(異包) |
|---|---|---|---|---|---|
| public | 公共 | ✅ | ✅ | ✅ | ✅ |
| protected | 受保護 | ✅ | ✅ | ✅ | ❌ |
| default (無修飾符) |
預設/包私有 | ✅ | ✅ | ❌ | ❌ |
| private | 私有 | ✅ | ❌ | ❌ | ❌ |
限制最寬鬆。被修飾的類別、屬性、方法可跨類別、跨套件(package)存取。通常用於對外公開的 API 介面。
限制最嚴格。僅能被該類別自身的物件存取,子類別不可存取,更不可跨套件存取。用於封裝內部實作細節。
介於 public 與 private 之間。可被類別自身方法與子類別存取,即使子類別在不同套件中也可存取。注意:非子類別的同包類別也可存取。
不加任何修飾符即為預設模式。僅允許在同一個套件內存取。類別、介面若無修飾符同樣為 package-private。
private,透過 public getter/setter 控制存取protecteddefaultpublic,謹慎暴露protected ≠ 僅子類別可見,同包非子類別也可見interface)的方法隱含 public abstract,欄位隱含 public static finalpublic 或 default,不能是 private/protected