【发布时间】: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 的方法?
【问题讨论】:
-
cool确实存在于Castle2中(它是继承的)。如果您有对象Castle2 x,您可以调用x.cool()。因此,它必须在每个非抽象子类中实现。
标签: java