我已经阅读了接口和抽象类之间的区别,但是这一点令人困惑。考虑此接口和类。
interface I {
public int hashCode();
public boolean equals(Object obj);
}
class B implements I {
// Works Fine
}
在这里工作正常,我不需要重写接口方法,因为Object是B的超类,并且这些方法都在其中实现。
现在考虑这些
abstract class A {
public abstract int hashCode();
public abstract boolean equals(Object obj);
}
class C extends A {
// Compile error because methods are not overridden
}
为什么会导致编译错误?这是否意味着Object不是抽象类的超类?还是我错过了一点?
这会导致编译错误,因为根据定义,抽象函数必须在继承链中实现下游。您已经[[created要求必须在A
的subclass中实现它们。
C
没有实现这些方法,因此编译失败。Object
是抽象类的
superclass
...但不是subclass,并且subclasses负责实现抽象功能。相反,如果一个类实现一个接口,则该实现可以存在于该类的继承层次结构中。将这些实现放在超类中是不太常见的,因为您通常会在超类中声明接口。[在某些情况下,您可能不喜欢退化/较差的设计,或者像这样的示例在浏览语言功能时。