在 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 中明確呼叫A.foo(),請使用下列語法:
A.super.foo();
此語法允許您指定確切的要呼叫的預設實現,解決潛在的衝突或壓倒一切的問題。在上面的範例中,afoo() 可以如下實現:
public void afoo() { A.super.foo(); }
afoo() 中的程式碼現在將從介面A 呼叫foo() 的預設實現,即使它已在class B.
此外,如果多個介面定義了同名的預設方法,則可以使用相同的語法來選擇要呼叫的具體實作。例如,如果 C 是具有預設 foo() 方法的另一個接口,則可以使用以下程式碼:
public class ChildClass implements A, C { @Override public void foo() { A.super.foo(); C.super.foo(); } }
此方法允許靈活地控制在類別中使用哪些預設實作。透過明確呼叫預設方法,您可以解決衝突並利用 Java 8 預設方法提供的擴充功能,而無需修改現有的介面定義。
以上是如何在 Java 中明確呼叫預設方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!