簡體   English   中英

必須將類聲明為抽象或實現抽象方法

[英]Class must be declared as abstract or implement abstract method

我有一個類和兩個接口

public class A implements B, C {
    public static void main(String[] args) {
        A a = new A();
        a.foo();
    }
}

public interface B {
    default void foo(){
        System.out.println("foo in B");
    }
}

public interface C {
    void foo();
}

我關心的是java不編譯這個給出一個我必須從C實現方法的錯誤。因此我有一個問題。 為什么默認主體不覆蓋那部分,我的意思是java必須關注的唯一事情就是所有方法都有它們的實現,對吧? 但對於A類,很明顯,實現是在B中給出的。

那么為什么java會出錯呢?

這是因為接口B和C不在同一繼承樹中。 如果它們不是,那么Java編譯器不能確定實現類是否具有所有接口方法的實現,直到它檢查每個實現接口的每個方法。

如果您將接口C定義為public interface C extends B那么您將不會收到錯誤,因為在這種情況下,Java編譯器將確保所有方法都已實現。

閱讀更多JLS§9.4.1。 繼承與壓倒

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM