![](/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.