必须将类声明为抽象或实现抽象方法

时间:2016-02-22 21:36:45

标签: java interface

我有一个类和两个接口

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会出错呢?

1 个答案:

答案 0 :(得分:3)

这是因为接口B和C不在同一继承树中。如果它们不是,那么Java编译器不能确定实现类是否具有所有接口方法的实现,直到它检查每个实现接口的每个方法。

如果您将接口C定义为public interface C extends B,那么您将不会收到错误,因为在这种情况下,Java编译器将确保所有方法都已实现。

从JLS §9.4.1. Inheritance and Overriding

了解详情