Java:我应该在实现抽象方法时添加@Override注释吗?

Eyv*_*ind 52 java overriding annotations abstract

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

And*_*yle 69

@Override在这种情况下,我更倾向于使用,以便在超类更改时(无论是完全删除方法,还是更改其签名等),方法都会在子类中被标记.

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

  • 您还需要Java 6来利用此批注.Java 5不允许您将其放在接口实现上. (4认同)

Jon*_*eet 21

是的 - 再一次,它告诉编译器,"我真的想在这里覆盖一个方法.如果没有相应的方法来覆盖,我犯了一个错误,想要被告知它!"

就我个人而言,我认为这只是一个注释而不是语言的一部分(因为它在C#中),这很可惜,但这当然是后见之明的好处.


mR_*_*r0g 14

是.Joshua Bloch推荐在Effective Java中实践.


Mar*_*ark 6

实际上,Joshua Bloch在Effective Java(第2版)的第178页的最后一段中说,对于使用Override注释覆盖抽象方法的具体类的方法并不重要,因为编译器无论如何都会给出错误.但是,"这样做无害".

我建议选择一种策略并坚持不懈地坚持下去.