【问题标题】:Y it's not mendatory to implement all interface methods in Child abstract class But Mendatory to implement all Interface methods in Grand Child class?是的,在子抽象类中实现所有接口方法不是强制性的,但是必须在大子类中实现所有接口方法?
【发布时间】:2016-06-07 20:10:48
【问题描述】:

我做了一个界面如下:

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

然后我将它的一个子抽象类设为:

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

这里我留下了cool()的实现,如果我编译上面的代码,它编译成功 但是当我添加 1 个 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();
}

为什么编译器强制我在Castle3 类中实现Castle 接口的方法,而Castle2 类中甚至没有? 为什么编译器不强制我在Castle2 类中实现接口Castle 的方法?

【问题讨论】:

标签: java


【解决方案1】:

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

但是抽象类不能被实例化。这就是为什么不需要通过抽象类来实现接口的方法的原因。

【讨论】:

    【解决方案2】:

    因为我们不能创建抽象类的对象。但是如果抽象类有一个子类,这个子类可以被实例化。 这就是为什么我们需要在子类中实现所有方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-06
      • 2020-02-04
      • 2020-05-18
      • 2014-06-30
      • 1970-01-01
      • 1970-01-01
      • 2018-01-21
      • 1970-01-01
      相关资源
      最近更新 更多