Delegation 作為 Java 中繼承的替代品
Sheeraz Gul
2022年5月1日
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.
Author: Sheeraz Gul
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn Facebook