为什么 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.object
的 toString()
方法?
您不必使用 @Override
来覆盖方法,它总是会覆盖它(也许在历史的某个时刻需要注释,我不知道)。如果您编写的方法具有与超级 class 方法相同的签名,它将被覆盖。
如果您不想覆盖某个方法,请将其设置为私有或最终(如果它是 public 方法)
@override 是注解。它实际上不会在编译时转换为任何字节码。它更像是对编译器的提示,也是让开发人员了解它覆盖它的清晰视觉提示
正如其他人已经指出的那样,覆盖方法不需要 @Override
注释。 Java API documentation 非常清楚地描述了目的。 @Override
告诉编译器你想要一个方法从 superclass 覆盖 class。因此,如果您在方法名称中输入错误或者方法的签名与 superclass.
中的任何方法的签名不匹配,编译器会警告您
今天,我正在编写一个带有 toString()
方法的 java class,我注意到当您在 super class。在发现我覆盖了 java.lang.object.toString
并发现每个 class 都有 java.lang.object
作为它们的超级 class(ref here)之后,我做了一些澄清研究。
通常,当我看到覆盖时,它有注释@Override
。
我的问题是,为什么我的 toString()
方法隐式地(没有 @Override
)覆盖 superclass java.lang.object
的 toString()
方法?
您不必使用 @Override
来覆盖方法,它总是会覆盖它(也许在历史的某个时刻需要注释,我不知道)。如果您编写的方法具有与超级 class 方法相同的签名,它将被覆盖。
如果您不想覆盖某个方法,请将其设置为私有或最终(如果它是 public 方法)
@override 是注解。它实际上不会在编译时转换为任何字节码。它更像是对编译器的提示,也是让开发人员了解它覆盖它的清晰视觉提示
正如其他人已经指出的那样,覆盖方法不需要 @Override
注释。 Java API documentation 非常清楚地描述了目的。 @Override
告诉编译器你想要一个方法从 superclass 覆盖 class。因此,如果您在方法名称中输入错误或者方法的签名与 superclass.