在 Java 中重写非虚拟方法时,@Override
建议使用注解,但如果我实现抽象方法怎么办?我@Override
也应该使用吗?
问问题
19518 次
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 回答