在物件導向設計中,類與類之間的靜態關係決定了系統的結構穩定性與擴展性。UML 定義了六種核心關係,按耦合強度由強到弱排序為:組合 > 聚合 > 關聯 > 依賴,另有繼承與實現屬於垂直維度的「is-a」關係。本文結合 Java 代碼語義與 UML 圖示,逐一拆解。
extends語義:子類繼承父類功能並可擴展新功能,體現「is-a」關係。
UML 表示:帶空心三角箭頭的實線,從子類指向父類。
代碼特徵:class Child extends Parent。
設計爭議:極低,語義明確。

implements語義:類實現介面定義的契約,體現「can-do」關係。
UML 表示:帶空心三角箭頭的虛線,從類指向介面。
代碼特徵:class Impl implements Interface。
設計爭議:極低。

語義:類 A 在方法參數、區域變數、靜態方法呼叫中使用類 B,關係具偶發性、暫時性。
UML 表示:帶箭頭虛線,從類 A 指向類 B。
代碼特徵:方法參數為 B、區域變數 new B()、呼叫 B.staticMethod()。
經典案例:人過河借用船,人與船即依賴關係。

語義:兩類在業務邏輯上長期關聯,如「人與朋友」、Order 與 Customer。可單向或雙向。
UML 表示:帶箭頭實線,可標註角色名與多重性(如 1..*)。
代碼特徵:成員變數為關聯類型(private Customer customer;)。

語義:Has-a 關係,整體與部分擁有獨立生命週期,部分可被多個整體共享。
UML 表示:空心菱形 + 實線箭頭,菱形在整體端。
代碼特徵:與關聯一致,僅語義區分。
經典案例:電腦與 CPU、公司與員工、航母編隊與各艦艇。

語義:Contains-a 關係,整體銷毀意味著部分同步銷毀,生命週期完全綁定。
UML 表示:實心菱形 + 實線箭頭。
代碼特徵:與關聯一致,語義上部分無法獨立存在。
經典案例:人與大腦、房屋與房間。

來源:類與類之間的幾種關係 - 博客園