提高安全性,隱藏內部實現細節。
private 限制直接訪問。public getter/setter。private int age;
public void setAge(int age) {
if (age < 0 || age > 100) this.age = 18; // 防呆
else this.age = age;
}
| 修飾符 | 同類 | 同包 | 子類 | 其他包 |
|---|---|---|---|---|
| private | ✓ | ✗ | ✗ | ✗ |
| default | ✓ | ✓ | ✗ | ✗ |
| protected | ✓ | ✓ | ✓ | ✗ |
| public | ✓ | ✓ | ✓ | ✓ |
protected 專為子類繼承設計;default 限定包內可見。
non-private 成員;default 需同包。abstract class 不可實例化,可含抽象/非抽象方法。| 修飾目標 | 效果 |
|---|---|
| 變數(基本型別) | 僅能賦值一次,不可變 |
| 變數(引用型別) | 鎖定引用地址,不可指向新物件 |
| 方法 | 禁止子類覆寫 |
| 類 | 禁止被繼承 |
將子類方法入口地址替換父類同名方法入口地址(函數指針替換)。
| 維度 | 介面 | 抽象類 |
|---|---|---|
| 語義 | 能力契約 | 實體骨架(含屬性與行為) |
| 成員 | 常數 + public abstract 方法 | 任意修飾符屬性/方法 |
| 實作 | 全部抽象(Java 8+ 可 default/static) | 可混合抽象與具體 |
| 繼承 | implements 多實作 | extends 單繼承 |