重寫Java 中的預設方法
Java 8 中引入的預設方法為介面提供了可擴充性,而無需修改現有實現。然而,問題是,當預設實現被覆蓋時,是否可以明確調用預設實現,或者由於不同介面中的多個預設實現而存在衝突。
考慮以下範例:
interface A { default void foo() { System.out.println("A.foo"); } } class B implements A { @Override public void foo() { System.out.println("B.foo"); } public void afoo() { // How to invoke A.foo() here? } }
要呼叫 B 類別中 foo 的預設實現,可以使用 A.super.foo()。
public void afoo() { A.super.foo(); }
這個語法允許您存取原始預設實現,即使該方法已在實現類別中重寫。
如果多個介面具有具有相同簽章的預設方法,例如介面A 和C 都具有foo方法中,您可以選擇要呼叫的特定預設實作:
public class ChildClass implements A, C { @Override public void foo() { A.super.foo(); // Accesses original foo() from A C.super.foo(); // Accesses original foo() from C } }
此語法提供了選擇所需預設實現的靈活性,或者您甚至可以將這兩種實作合併到您自己的自訂foo 中方法。方法呼叫語法在 Java 語言規範第 15 章中有正式描述。
以上是當 Java 中預設方法被重寫時,如何明確地呼叫它的實作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!