首頁 >Java >java教程 >當 Java 中預設方法被重寫時,如何明確地呼叫它的實作?

當 Java 中預設方法被重寫時,如何明確地呼叫它的實作?

DDD
DDD原創
2024-12-01 09:30:15542瀏覽

How Can You Explicitly Invoke a Default Method's Implementation in Java When It's Overridden?

重寫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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn