覆盖对象类方法中的交互与抽象类

Jok*_*ker 2 java abstract-class interface java-8

以下代码编译得非常好。

据我了解,这不应该是因为Class C实施interface I

因为抽象类也无法编译。

interface I {
    public String toString();
}

class C implements I {

}
Run Code Online (Sandbox Code Playgroud)

抽象类未编译

abstract class MyAbstractClass {
    public abstract String toString();
}

public class MyClass extends MyAbstractClass {
}
Run Code Online (Sandbox Code Playgroud)

请帮助我理解这种行为为什么抽象没有编译而接口呢?

Rob*_*sen 5

每个类都隐式地扩展java.lang.Objectjava.lang.Object实现了该toString()方法。该实现满足了接口的契约,因此不需要您的类提供自己的toString().

抽象类的编译失败的原因是因为您显式地将toString()方法定义为abstract,从而表明具体的扩展类被迫提供自己的实现。

  • 是的,抽象类失败了,因为您显式地将“toString()”方法定义为抽象方法,从而强制扩展类实现它。 (3认同)
  • MyAbstractClass 失败,因为“public abstract String toString()”是您创建的新方法,应该在子类中实现。但是您的接口中的“public String toString()”是 Object 类中的一个方法,您只需在接口中覆盖它即可 (2认同)