封裝(Encapsulation),簡單來說用公開的方法存取私有的變數,將資料和存取資料所用的成員方法包在一個物件中,所有對物件資料的存取動作都必須要通過這個物件的成員方法當作介面來執行,其他的程式都沒有對物件內部資料的直接存取權力,就像是把貴重的物品放進一個保險箱,外面的人都沒辦法看到裡面是什麼東西,更沒辦法拿出來使用,只有保險箱的主人可以。而資料封裝的基本就是類別(class),一個class設計者可以決定其他的類別能不能讀取自己的class,對物件資料的存取動作,分成四個等級:
對於實體變數,通常會被設定為private,再通過method,像是用set/get來存取資料。
public class Goods {
private int num;
private double price;
public void setNum(int num){
this.num = num; // 存商品編號資料
}
public int getNum() {
return gno; // 取商品編號資料
}
public void setPrice(double gprice){
this.price = price; // 存商品價格資料
}
public double getPrice(){
return price; // 取商品價格資料
}
}
如果直接取員工資料
public class GoodsTest {
public static void main(String[] args) {
Goods g1 = new Goods();
System.out.println(g1.num());
System.out.println(g1.price());
}
}
這樣子會編譯錯誤,因為num和price在Goods類別裡是private access,應更正如下就正常了。
public class GoodsTest {
public static void main(String[] args) {
Goods g1 = new Goods();
g1.setNum(0001);
g1.setPrice(100.0);
System.out.println(g1.getNum()); // 0001
System.out.println(g1.getPrice()); // 100.0
}
}