java – 为什么实现接口的抽象类可能错过接口的方法之一的声明/实现?

当你使用一个抽象类来实现一个接口时,Java中会出现一个奇怪的事情:一些接口的方法可能完全丢失(即既没有抽象声明也没有实际的实现),但是编译器没有抱怨。

例如,给定接口:

public interface IAnything {
  void m1();
  void m2();
  void m3();
}

下面的抽象类在没有警告或错误的情况下被快速编译:

public abstract class AbstractThing implements IAnything {
  public void m1() {}
  public void m3() {}
}

你能解释一下为什么吗?

最佳答案
这是因为如果一个类是抽象的,那么根据定义,你需要创建它的子类来实例化。子类将需要(由编译器)实现抽象类省略的任何接口方法。

按照您的示例代码,尝试创建AbstractThing的子类,而不实现m2方法,并看到编译器给您的错误。它将强制您实现此方法。

转载注明原文:java – 为什么实现接口的抽象类可能错过接口的方法之一的声明/实现? - 代码日志