当您使用抽象类来实现接口时,Java中会出现一个奇怪的事情:接口的某些方法可能完全缺失(即,既不存在抽象声明也不存在实际实现),但编译器不会抱怨。为什么实现接口的抽象类可能会错过接口方法之一的声明/实现?
例如,给出的接口:
public interface IAnything {
void m1();
void m2();
void m3();
}
以下抽象类没有警告或错误被欢快编译:
public abstract class AbstractThing implements IAnything {
public void m1() {}
public void m3() {}
}
你能解释一下为什么吗?
不能创建抽象类的对象。所以,只要没有为抽象类提供实现,就不能为IAnything创建对象。所以这对于编译器来说绝对好。编译器期望,任何实现IAnything的非抽象类都必须实现所有由IAnything声明的方法。由于必须扩展和实现AbstractThing才能创建对象,因此编译器会抛出一个错误,如果该实现没有实现AbstractThing遗漏的IAny方法。 – VanagaS 2017-03-19 06:25:36
我们可以称之为“适配器设计模式”吗?如果我们在抽象类中保留m1,m2,m3空体。 然后MyMainClass扩展抽象类&我可以自由地覆盖任何我想要的方法,没有强制覆盖所有方法。 请指教! – 2018-01-06 20:04:18