| 關係 | 英文 | 基礎 | 範例 | 程式碼表現 |
|---|---|---|---|---|
| 是一種 | IS-A | 類別繼承 或 介面實作 | 野馬 是一種 馬 | class Mustang extends Horse |
| 有一個 | HAS-A | 組合/關聯 (持有參考) | 馬 有 響繩 | class Horse { Reins reins; } |
PC 與 Workstation 皆繼承 Computer,共享 CPU、記憶體等共同屬性。Car 有 Engine、Wheel;同樣是 Car,引擎可換裝電動或油電混合。// IS-A
abstract class Animal { abstract void makeSound(); }
class Dog extends Animal { void makeSound() { System.out.println("汪汪"); } }
class Cat extends Animal { void makeSound() { System.out.println("喵喵"); } }
// HAS-A
class Engine { void start() { System.out.println("引擎啟動"); } }
class Car {
private Engine engine; // 組合
public Car(Engine e) { this.engine = e; }
public void start() { engine.start(); }
}
// 使用
Animal a = new Dog(); // IS-A: Dog 是 Animal
Car myCar = new Car(new Engine()); // HAS-A: Car 有 Engine
掌握 IS-A 與 HAS-A 的區別,能設計出高內聚、低耦合、易維護的物件導向架構。