在Java中覆盖非虚方法时,建议使用@Override注释,但是如果实现抽象方法怎么办?我也应该使用@Override吗?
答案 0 :(得分:66)
在这种情况下,我更倾向于使用@Override
,因此如果超类发生更改(无论是完全删除方法,还是更改其签名等),方法都会在子类中被标记。 p>
唯一真正的区别是,如果没有注释,如果超类/接口中的方法被更改或删除,则所讨论的实现只是成为该类的“普通”方法。因此,如果您仅为履行合同而实施该方法,则应添加注释;如果方法在你的类中有意义,你可能不应该添加它,无论任何实现的接口或继承的抽象方法。
答案 1 :(得分:20)
是 - 再次,它告诉编译器,“我真的想在这里覆盖一个方法。如果不是一个相应的方法来覆盖,我犯了一个错误,并希望被告知这件事!“
我个人觉得很遗憾,这只是一个注释,而不是语言的一部分(就像它在C#中一样),但当然这也是后见之明的好处。
答案 2 :(得分:13)
是。 Joshua Bloch建议在Effective Java中实践。
答案 3 :(得分:6)
实际上,Joshua Bloch在 Effective Java(第2版)的第178页的最后一段中说,对于覆盖抽象方法的具体类的方法来说,使用{{ 1}}注释因为编译器无论如何都会给出错误。但是,“这样做无害”。
我建议选择一种策略并坚持不懈地使用它。