繁体   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