为什么toString()是java.lang.object的隐式重写?

时间:2016-01-22 04:13:13

标签: java oop inheritance override

今天,我正在编写一个带有toString()方法的java类,我注意到当你覆盖超类中的方法时Eclipse会放置^箭头。在发现我覆盖java.lang.object.toString并发现每个班级都有java.lang.object作为他们的超类(ref here)后,我做了一些澄清研究。

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

我的问题是,为什么我的toString()方法隐式地(没有@Override)覆盖了超类toString()的{​​{1}}方法?

3 个答案:

答案 0 :(得分:3)

您不必使用@Override覆盖方法,它总是覆盖它(可能在历史的某个时刻需要注释,我不知道)。如果你编写一个具有超类方法相同签名的方法,它将被覆盖。

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

答案 1 :(得分:1)

@override是一个注释。它实际上不会转换为编译时的任何字节代码。它更多的是对编译器的暗示以及开发人员理解它覆盖它的明确视觉提示

答案 2 :(得分:1)

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