【发布时间】:2010-11-03 14:28:08
【问题描述】:
在Java中重写非虚拟方法时,建议使用@Override注解,但如果我实现抽象方法呢?我也应该使用@Override 吗?
【问题讨论】:
标签: java annotations overriding abstract
在Java中重写非虚拟方法时,建议使用@Override注解,但如果我实现抽象方法呢?我也应该使用@Override 吗?
【问题讨论】:
标签: java annotations overriding abstract
在这种情况下,我倾向于使用@Override,这样如果超类发生更改(完全删除该方法或更改其签名等),该方法就会在子类中被标记。
唯一真正的区别是,如果没有注释,如果超类/接口中的方法被更改或删除,所讨论的实现只是成为该类的“正常”方法。因此,如果您只是为了履行合同而实施该方法,则应该添加注释;如果该方法在您的类中有意义,则您可能不应该添加它,而不管任何实现的接口或继承的抽象方法。
【讨论】:
是的——它再次告诉编译器,“我真的想在这里重写一个方法。如果没有对应的方法要重写,我犯了一个错误,我想被告知!”
我个人认为很遗憾这只是一个注释而不是语言的一部分(就像在 C# 中一样),但这当然是事后诸葛亮的好处。
【讨论】:
是的。这是 Joshua Bloch 在 Effective Java 中推荐的做法。
【讨论】:
实际上,Joshua Bloch 在Effective Java (2nd Ed.)第 178 页的最后一段中说,重写抽象方法的具体类的方法不必使用 @987654321 @ 注释,因为编译器无论如何都会给出错误。但是,“这样做并没有害处”。
我建议选择一种策略并始终如一地坚持下去。
【讨论】: