封裝
//PURPOSE:建立一個汽車物件
public class Car {
//變數
private String name;
private String color;
//建構子
public Car(){
name="car";
color="black";
}
public Car(String n,String c){
name=n;
color=c;
}
//方法
public void car_break(){
System.out.println(name+"煞車中");
};
public void Speed_up(){
System.out.println(name+"加速中");
};
}
由class Car的內部設計可看出,變數我們通常都習慣設定成private,再透過其他public function來設定物件裡的private變數,這樣就可以避免其他使用者用不適當的操作方法給予變數名稱。
taxi.color="yellow"; // error : The field Car.color is not visible
以class Car為例,我們要更改汽車的顏色,只能在建置汽車物件時,透過建構子更改,並不能直接輸入更改。
若要讓使用者在其他狀饋下可以更改,通常會在class內部建立一個新的method
public void setColor(String c){
color=c;
}
taxi.setColor("yellow"); // correct : 使用public function來更改private field
以台灣國民為例,每一個國民都是不同的物件,每個人都有身分證字號這個屬性,身分證字號會根據一連串的規則來產生,讓每個人的身份證字號都是獨一無二的,例如不同縣市出生就會有不同英文字母開頭的身分證字號。
今天我們若統一向戶政事務所來申請身分證字號,那產生出來的身分證字號將有規律且合法,但我們若讓每個人都自行更改自己的身分證字號,大家隨便想取什麼身分證字號都可以,將會造成一團混亂。
程式碼也是同理,所以我們盡量避免讓其他使用者擁有直接更改特定變數內容的權力。
像這樣將特定函式和變數設成private,讓使用者僅能透過特定管道來取得或使用,就稱為封裝