为什么 toString() 是 java.lang.object 的隐式覆盖?

Why is toString() an implicit override of java.lang.object?

今天,我正在编写一个带有 toString() 方法的 java class,我注意到当您在 super class。在发现我覆盖了 java.lang.object.toString 并发现每个 class 都有 java.lang.object 作为它们的超级 class(ref here)之后,我做了一些澄清研究。

通常,当我看到覆盖时,它有注释@Override

我的问题是,为什么我的 toString() 方法隐式地(没有 @Override)覆盖 superclass java.lang.objecttoString() 方法?

您不必使用 @Override 来覆盖方法,它总是会覆盖它(也许在历史的某个时刻需要注释,我不知道)。如果您编写的方法具有与超级 class 方法相同的签名,它将被覆盖。

如果您不想覆盖某个方法,请将其设置为私有或最终(如果它是 public 方法)

@override 是注解。它实际上不会在编译时转换为任何字节码。它更像是对编译器的提示,也是让开发人员了解它覆盖它的清晰视觉提示

正如其他人已经指出的那样,覆盖方法不需要 @Override 注释。 Java API documentation 非常清楚地描述了目的。 @Override 告诉编译器你想要一个方法从 superclass 覆盖 class。因此,如果您在方法名称中输入错误或者方法的签名与 superclass.

中的任何方法的签名不匹配,编译器会警告您