封裝、繼承、多態是面向對象三大支柱。本文深入剖析封裝的本質、實作細節及相關關鍵字機制,配合完整代碼示例,助你建立扎實的 OOP 基礎。
private 修飾屬性,提供 public 的 getter/setter,並在其中加入邏輯驗證。| 修飾符 | 同類 | 同包 | 子類 | 其他 |
|---|---|---|---|---|
public | ✓ | ✓ | ✓ | ✓ |
protected | ✓ | ✓ | ✓ | ✗ |
| 默認 (package-private) | ✓ | ✓ | ✗ | ✗ |
private | ✓ | ✗ | ✗ | ✗ |
public class Teacher {
private String name;
private int age;
public void setName(String tname) { this.name = tname; }
public String getName() { return name; }
public void setAge(int tage) {
if (tage < 25) {
System.out.println("年齡太小了");
age = 25;
} else {
age = tage;
}
}
public int getAge() { return age; }
}
外部調用:
Teacher t = new Teacher();
t.setName("張三");
t.setAge(10); // 觸發驗證,實際 age 設為 25
System.out.println(t.getAge()); // 輸出 25
new 操作符調用,先分配記憶體並默認初始化,再執行構造器代碼。
this 關鍵字三大用法this.age = age;this() 必須置於構造器首行,調用本類其他構造器。static 關鍵字深度解析| 特性 | 靜態成員 | 非靜態成員 |
|---|---|---|
| 所屬 | 類(類變量/類方法) | 對象(實例變量/實例方法) |
| 加載時機 | 類加載時,優先於對象 | 對象創建時 |
| 共享性 | 所有對象共享一份 | 每個對象獨立擁有 |
| 訪問方式 | 類名.成員 或 對象.成員 | 對象.成員 |
| 限制 | 不可用 this、不可直接訪問非靜態成員 | 可訪問靜態與非靜態 |
靜態代碼塊:static { ... },類加載時執行一次,用於靜態變量複雜初始化。
同一類中,方法名相同但參數列表不同(類型、個數、順序),與返回類型無關。編譯器通過方法簽名區分。
public class Printer {
public void print(String content) { ... }
public void print(int content) { ... }
public void print(String str, int content) { ... }
// public int print(int content) { ... } // 錯誤:僅返回類型不同不構成重載
}
private,暴露必要的 public getter/setter。this 消除歧義。static。封裝不僅是語法規範,更是「高內聚、低耦合」設計哲學的代碼體現。