類別是物件的藍圖或原型。它定義了物件擁有的狀態(屬性/欄位)與行為(方法)。現實世界中,同類物件共享相同結構:成千上萬輛自行車出自同一張圖紙,擁有相同零件(齒輪、踏板、車架),每輛車都是「自行車類別」的一個實例。
class Bicycle {
// 狀態
int cadence = 0; // 踏頻
int speed = 0; // 速度
int gear = 1; // 檔位
// 行為
void changeCadence(int newValue) { cadence = newValue; }
void changeGear(int newValue) { gear = newValue; }
void speedUp(int increment) { speed += increment; }
void applyBrakes(int decrement) { speed -= decrement; }
void printStates() {
System.out.println("cadence:" + cadence + " speed:" + speed + " gear:" + gear);
}
}
cadence、speed、gear 代表物件狀態class BicycleDemo {
public static void main(String[] args) {
// 建立兩個獨立實例
Bicycle bike1 = new Bicycle();
Bicycle bike2 = new Bicycle();
// 操作 bike1
bike1.changeCadence(50);
bike1.speedUp(10);
bike1.changeGear(2);
bike1.printStates(); // cadence:50 speed:10 gear:2
// 操作 bike2
bike2.changeCadence(50);
bike2.speedUp(10);
bike2.changeGear(2);
bike2.changeCadence(40);
bike2.speedUp(10);
bike2.changeGear(3);
bike2.printStates(); // cadence:40 speed:20 gear:3
}
}
每個實例擁有獨立的狀態副本,互不干擾。這正是封裝的核心價值:狀態與行為綁定在物件內部,外部只能透過方法存取。
| 術語 | 說明 | 範例 |
|---|---|---|
| 類別 | 模板、藍圖、定義結構與行為 | Bicycle |
| 實例 | 根據類別建立的具體物件,佔有記憶體 | bike1, bike2 |
| 實例化 | new Bicycle() 建立實例的過程 | 在堆上分配記憶體、初始化欄位 |
| 欄位 | 儲存狀態的變數 | cadence, speed |
| 方法 | 定義行為的函式 | speedUp(), printStates() |
static 欄位/方法屬於類別本身,非實例掌握「類別=藍圖、實例=房子」的比喻,是邁向物件導向程式設計的第一步。