在Java中呼叫預設方法
問題:
是否可以呼叫預設方法當當方法被覆蓋或與多個介面中的實作衝突時,該方法的實作如何?考慮以下程式碼:
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? } }
答案:
預設方法 A.foo() 可以使用語法 A.super.foo() 明確呼叫。此語法允許您存取該方法的原始實現,即使該方法已被覆蓋或由於衝突而不可用。
範例:
要呼叫A. foo() 從類別B 中的方法afoo() 中,您可以使用下列內容程式碼:
public void afoo() { A.super.foo(); }
其他用途:
super 語法也可以用於從其他介面存取預設方法。例如,如果介面C 也有一個預設方法foo(),則可以如下存取類別B 中的兩個實作:
public void bah() { A.super.foo(); // Original `foo()` from interface `A` C.super.foo(); // Original `foo()` from interface `C` }
透過使用super 語法,您可以選擇性地選擇要呼叫哪一個預設實作或在您自己的方法中組合多個實作。
以上是當重寫或衝突時如何呼叫 Java 中的預設方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!