在面向物件程式設計中,封裝是將抽象介面的實作細節包裝、隱藏的方法。可視為保護屏障,防止外部程式碼隨意存取類別內部程式碼與資料。存取必須透過嚴格介面控制。
public class Person {
private String name;
private int age;
}
如此 name、age 僅本類可存取,其他類無法直接訪問,達成資訊隱藏。
public class Person {
private String name;
private int age;
public int getAge() { return age; }
public String getName() { return name; }
public void setAge(int age) { this.age = age; }
public void setName(String name) { this.name = name; }
}
this 關鍵字解決實例變數(private String name)與區域變數(setName(String name))同名衝突。
public class EncapTest {
private String name;
private String idNum;
private int age;
public int getAge() { return age; }
public String getName() { return name; }
public String getIdNum() { return idNum; }
public void setAge(int newAge) { age = newAge; }
public void setName(String newName) { name = newName; }
public void setIdNum(String newId) { idNum = newId; }
}
這些 public 方法是外部類別存取私有成員的唯一入口,慣稱 getter/setter 方法。
public class RunEncap {
public static void main(String[] args) {
EncapTest encap = new EncapTest();
encap.setName("James");
encap.setAge(20);
encap.setIdNum("12343ms");
System.out.print("Name: " + encap.getName() + " Age: " + encap.getAge());
}
}
Name: James Age: 20
final 修飾不可變欄位getXxx/setXxx、isXxx for boolean)