56

在 Java 中重写非虚拟方法时,@Override建议使用注解,但如果我实现抽象方法怎么办?我@Override也应该使用吗?

4

4 回答 4

79

在这种情况下,我倾向于使用@Override,以便如果超类发生更改(完全删除该方法或更改其签名等),该方法会在子类中被标记。

唯一真正的区别是,如果没有注释,如果超类/接口中的方法被更改或删除,所讨论的实现只是成为该类的“正常”方法。因此,如果您只是为了履行合同而实施该方法,则应该添加注释;如果该方法在您的类中有意义,则您可能不应该添加它,而不管任何实现的接口或继承的抽象方法。

于 2009-06-17T08:56:13.533 回答
23

是的——它再次告诉编译器,“我真的很想在这里覆盖一个方法。如果没有相应的方法可以覆盖,我就犯了一个错误,想被告知!”

就我个人而言,我认为这只是一个注释而不是语言的一部分(就像在 C# 中一样),但这是事后诸葛亮的好处,当然。

于 2009-06-17T08:56:34.610 回答
16

是的。Joshua Bloch 在 Effective Java 中推荐的做法。

于 2009-06-17T08:56:26.343 回答
6

实际上,Joshua Bloch 在Effective Java (2nd Ed.)第 178 页的最后一段中说,重写抽象方法的具体类的方法不必使用Override注解,因为编译器无论如何都会给出错误。但是,“这样做并无害处”。

我建议选择一种策略并始终如一地坚持下去。

于 2010-01-05T10:32:21.710 回答