当在Java中重写非虚拟方法时,建议使用@Override注释,但如果我实现抽象方法会怎样?我应该使用@Override吗?Java:我应该在实现抽象方法时添加@Override注释吗?
回答
在这种情况下,我倾向于使用@Override
,这样如果超类更改(完全删除方法或更改其签名,等等),该方法将在子类中被标记。
唯一的区别是,没有注释,如果在超类/接口的方法改变或除去,所讨论的实现简单地成为该类别的一个“正常”的方法。因此,如果您只是为了履行合同而实施该方法,您应该添加注释;如果该方法在您的类中有意义,则不应该添加它,而不考虑任何已实现的接口或继承的抽象方法。
是。这是Joshua Bloch在Effective Java中推荐的练习。
是的 - 它再次告诉编译器,“我真的想在这里重写一个方法。如果有不是是一个覆盖的相应方法,我犯了一个错误,想要告诉它!”
我个人认为这是一个遗憾,这只是一个注释,而不是语言的一部分(因为它是在C#),但是那是当然的后见之明。
+1为“回归测试” – guerda 2009-06-17 08:58:23
保存了我的皮肤几次。 – 2009-06-17 15:37:16
事实上,约书亚·布洛克,在178页的有效的Java最后一段(第2版)说,它不是必需的具体类重写抽象方法使用Override
注释的方法,因为编译器会无论如何给错误。但是,“这样做并没有害处”。
我建议选择一个策略,始终坚持它。
- 1. 我应该在抽象类实现接口时创建抽象方法吗?
- 2. 实现接口方法时,我应该使用@Override标记吗?
- 3. 在java中实现抽象方法/类
- 4. VB.NET - 实现IDisposable时应该添加Finalize方法吗?
- 5. 我应该评论Java中的@Override方法吗?
- 6. 应该在实现适配器模式时抽象配置吗?
- 7. 我应该实现writeToParcel方法吗?
- 8. 在运行时实现抽象方法?
- 9. 我应该在InputListener对象的方法内实现动作吗?
- 10. Java的动态实现抽象方法
- 11. 我必须删除@Override注释吗?
- 12. 是否应该将Javadoc注释添加到实现中?
- 13. 抽象类/方法实现
- 14. 实现AnimationListener抽象方法
- 15. 在“添加未实现的方法”接口中导入注释
- 16. 实现节点时的抽象方法
- 17. 如何实现类似于@Override java注释的东西?
- 18. 在Eclipse中为接口实现添加缺少@Override注释的警告
- 19. 为什么我们在实现Interface的方法时使用@Override?它真的重写该方法吗?
- 20. 在抽象类中使用抽象类时如何实现抽象方法
- 21. @Override注释
- 22. @override注释
- 23. 我应该向DOM对象添加一个方法吗?
- 24. 添加方法groovy.util.logging.Slf4j注释?
- 25. 将部分实现添加到抽象方法
- 26. 实现在Python的抽象方法3
- 27. 在matlab中实现抽象方法
- 28. Java,Hibernate注释,如何向POJO对象添加方法?
- 29. 有什么办法可以在java中实现'抽象类方法'吗?
- 30. 为什么Eclipse在“生成委托方法”重构中添加@Override注释?
您还需要Java 6来利用此注释。 Java 5不允许你将它放在接口实现上。 – akarnokd 2009-06-17 09:03:21