![](/img/trans.png)
[英]RxAndroid: Class must either be declared abstract or implement abstract method error
[英]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.