是不是必须强制在Child抽象类中实现所有接口方法,而必须强制在Grand Child类中实现所有接口方法?

沙申克

我将界面设置为:

interface Castle
    {
    public void sad();
    public void cool();
    }

然后我做了一个孩子的抽象类为:

abstract class Castle2 implements Castle
    {
    abstract void sad();
    }

在这里,我离开了cool()的实现,如果我遵循上面的代码,则编译成功,但是当我添加了Castle2的另外一个子类时:

class Castle3 extends Castle2{
public void sad(){
System.out.println("SAD");
}
public static void main(String...args){
new Castle3().sad();
}
}

并尝试编译上面的代码,那么它甚至没有编译我的代码,说明以下错误

Castle.java:13:错误:Castle3不是抽象的,并且不覆盖Castle中的抽象方法cool()

当我在Castle2类上运行javap工具时,我得到了以下结果

abstract class Castle2 implements Castle {
Castle2();
public void sad();
}

为什么Compiler强迫我在Castle3类中实现一个Castle3方法的接口,而Castle2类中却没有该方法?为什么编译器不强迫我在Castle2类中实现接口Castle的方法?

苏潘卡

那是因为具体的类必须具有实现,因为它们可以被实例化。假设它们允许具体的类不实现接口的所有方法,则会出现问题。如果在代码中我们调用未实现的方法,则JVM将不会具有未实现的方法的地址。

但是抽象类不能被实例化。这就是为什么不是必须要由抽象类实现接口方法的原因。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档