在 Java 中,類 A 調用類 B 的方法,本質上是建立類之間的關聯關係。最基本的兩種方式是組合和依賴。本文通過代碼示例詳細說明兩者的區別與適用場景。
public class A {
private B b; // 組合關聯
public void setB(B b) { this.b = b; } // 或構造器注入
public void methodA() {
b.show(); // 調用 B 的方法
}
}
// 使用
A a = new A();
B b = new B();
a.setB(b);
a.methodA();
特點:
public class A {
public void methodA(B b) { // 依賴關聯
b.show();
}
}
// 使用
A a = new A();
B b = new B();
a.methodA(b); // 傳入具體實例
特點:
| 維度 | 組合 | 依賴 |
|---|---|---|
| UML 關係 | 實線菱形箭頭 | 虛線箭頭 |
| 生命周期 | 與擁有者一致或受控 | 方法調用期間 |
| 耦合度 | 較高 | 較低 |
| 適用場景 | 核心功能需長期協作 | 輔助功能、策略模式、工具類 |
public interface Showable { void show(); }
public class B implements Showable { public void show() { ... } }
public class A {
private Showable showable; // 依賴抽象
public void setShowable(Showable s) { this.showable = s; }
public void methodA() { showable.show(); }
}
new 造成硬編碼耦合。理解組合與依賴的本質區別,是掌握面向對象設計的關鍵一步。