抽象类是否扩展对象?

问题描述 投票:24回答:11

我已经阅读了接口和抽象类之间的区别,但是这一点令人困惑。考虑此接口和类。

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不是抽象类的超类?还是我错过了一点?

java interface abstract-class
11个回答
33
投票

这会导致编译错误,因为根据定义,抽象函数必须在继承链中实现下游。您已经[[created要求必须在Asubclass中实现它们。

Class C没有实现这些方法,因此编译失败。

Object是抽象类的

superclass

...但不是subclass,并且subclasses负责实现抽象功能。相反,如果一个类实现一个接口,则该实现可以存在于该类的继承层次结构中。将这些实现放在超类中是不太常见的,因为您通常会在超类中声明接口。

[在某些情况下,您可能不喜欢退化/较差的设计,或者像这样的示例在浏览语言功能时。


6
投票

3
投票

3
投票

1
投票

1
投票

0
投票
incomplete

0
投票
每个类都扩展对象

0
投票

0
投票

-2
投票
© www.soinside.com 2019 - 2024. All rights reserved.