在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 中的afoo() 明確呼叫A.foo() 的預設實現,我們可以使用語法:
A.super.foo();
這種方法允許我們存取該方法的原始預設實現,即使它已被覆蓋或與其他預設實現存在衝突。
在更複雜的場景中,當多個介麵包含同名的預設方法時,我們可以使用相同的語法來選擇我們想要使用的特定預設實作:
public class ChildClass implements A, C { @Override public void foo() { // Override and do something else // Or manage conflicts A.super.foo(); C.super.foo(); // Default implementation from C } public void bah() { A.super.foo(); // Default implementation from A C.super.foo(); // Default implementation from C } }
透過明確地透過呼叫預設方法,我們可以控制介面的擴展方式、解決衝突並根據需要存取原始實現,而不會破壞重寫的契約。這為基於介面的設計提供了靈活性和客製化。
以上是重寫後如何明確呼叫 Java 介面的預設方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!