我有一个类和两个接口
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会出错呢?
答案 0 :(得分:3)
这是因为接口B和C不在同一继承树中。如果它们不是,那么Java编译器不能确定实现类是否具有所有接口方法的实现,直到它检查每个实现接口的每个方法。
如果您将接口C定义为public interface C extends B
,那么您将不会收到错误,因为在这种情况下,Java编译器将确保所有方法都已实现。