HOWTO · Java
Delegation 作為 Java 中繼承的替代品
本教程演示了委託作為 Java 中繼承的替代品。
本頁內容
Java 中繼承的替代品是 Delegation。Delegation 可以定義為將任務或職責分配給次要方。
在 Java 中,Delegation 是使用類變數的例項並將訊息傳遞給例項來實現的。本教程演示了 Delegation 如何可以替代 Java 中的繼承。
在 Java 中使用 Delegation 作為繼承的替代品
Delegation 更多地關注例項之間的關係。Delegation 與繼承相比有幾個優點,例如 Delegation 即使在執行時也是動態的,這意味著它可以在執行時進行編輯。
我們可以使用 Delegation 實現以下目標。
Delegation可以減少方法與其類的耦合。- 元件在
Delegation中的行為可以相同,這裡也應該提到,這種情況將來可以改變。 - 如果我們需要在另一個類中使用功能而不改變該功能,那麼
Delegation是比繼承更好的選擇。 - 需要增強
demo時可以使用Delegation和 composition,但是demo是 final 的,不能進一步細分。 - 使用
Delegation,我們可以重用方法的功能而不覆蓋它。
首先,讓我們看一個 Java 中的繼承示例並將其轉換為 Delegation。
package delftstack;
// Example for Inheritance
class Delftstack_One {
void print_delftstack() {
System.out.println("Hello! This delftstack program demonstrates the inheritance.");
}
}
class Delftstack_Two extends Delftstack_One {
void delftstack() {
super.print_delftstack();
}
}
public class Java_Inheritance {
public static void main(String[] args) {
Delftstack_Two Demo_Inheritance = new Delftstack_Two();
Demo_Inheritance.delftstack();
}
}
上面的程式碼是 inheritance 的一個例子,我們稱其為子類中的父類方法。
見輸出:
Hello! This delftstack program demonstrates the inheritance.
現在讓我們嘗試使用 Delegation 來實現相同的功能。
package delftstack;
// Example for delegation
class Delftstack_One {
void print_delftstack() { // this method is the "delegate"
System.out.println("Hello! This delftstack program demonstrates the delegation.");
}
}
class Delftstack_Two {
Delftstack_One Demo_Delegation = new Delftstack_One(); // this is how a "delegator" is created
void delftstack() { // This method is used to create the delegate
Demo_Delegation.print_delftstack(); // This is the delegation
}
}
public class Java_Delegation {
// The delegation will work similarly to inheritance but with more dynamic properties
public static void main(String[] args) {
Delftstack_One printer = new Delftstack_One();
printer.print_delftstack();
}
}
上面的程式碼演示了委託的整個過程。
輸出:
Hello! This delftstack program demonstrates the delegation.