封裝是物件導向的基石,將資料與操作綁定、隱藏內部細節、對外暴露受控介面。本文透過 Husband/Wife 範例,說明封裝三大優勢:降低耦合、內部實作可自由修改、精確控制欄位存取,並示範 setter/getter 進階用法。
public class Husband {
private String name;
private String sex;
private int age;
private Wife wife; // 無 getter,隱私保護
// 對外介面
public String getName() { return name; }
public void setName(String name) { this.name = name; }
// ... 其他 getter/setter
}
外部程式只依賴公開介面,不依賴內部實作細節。
將 age 從 int 改為 String:
private String age;
public void setAge(int age) { this.age = String.valueOf(age); } // 內部轉換
public String getAge() { return age; }
呼叫端 husband.setAge(22) 完全不需變動。
public void setAge(int age) {
if (age > 120) {
System.out.println("ERROR: 年齡異常");
} else {
this.age = age;
}
}
// 資料庫存 0/1,前台顯示 男/女
public String getSexName() {
return "1".equals(sex) ? "男" : "0".equals(sex) ? "女" : "未知";
}
// 狀態對應操作連結
public String getCzHTML() {
return "1".equals(zt)
? "啟用"
: "禁用";
}
封裝不只是「加上 private 再產生 getter/setter」,而是設計受控介面,在保護資料完整性的同時,賦予系統彈性應對變更的能力。良好的封裝是低耦合、高內聚系統的基石。