以下代码绝对可以编译。

据我了解,这不应该是因为Class C实现了interface I
因为抽象类也无法编译。

interface I {
    public String toString();
}

class C implements I {

}

抽象类未编译
abstract class MyAbstractClass {
    public abstract String toString();
}

public class MyClass extends MyAbstractClass {
}

请帮助我理解这种行为,为什么抽象不是编译和接口呢?

最佳答案

每个类都隐式扩展java.lang.Object,并且java.lang.Object实现toString()方法。该实现满足了接口的约定,从而消除了类提供自己的toString()实现的需要。

对于抽象类,编译失败的原因是,您将toString()方法显式定义为abstract,从而表示必须强制具体的扩展类提供其自己的实现。

08-26 01:30