當在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. 我應該在InputListener對象的方法內實現動作嗎?
- 8. 我必須刪除@Override註釋嗎?
- 9. 是否應該將Javadoc註釋添加到實現中?
- 10. 實現節點時的抽象方法
- 11. 在Eclipse中爲接口實現添加缺少@Override註釋的警告
- 12. 爲什麼我們在實現Interface的方法時使用@Override?它真的重寫該方法嗎?
- 13. @Override註釋
- 14. @override註釋
- 15. 我應該向DOM對象添加一個方法嗎?
- 16. 添加方法groovy.util.logging.Slf4j註釋?
- 17. 將部分實現添加到抽象方法
- 18. 實現在Python的抽象方法3
- 19. Java,Hibernate註釋,如何向POJO對象添加方法?
- 20. 爲什麼Eclipse在「生成委託方法」重構中添加@Override註釋?
- 21. 有什麼辦法可以在java中實現'抽象類方法'嗎?
- 22. 我應該用這種方法釋放對象嗎?
- 23. 抽象類的XmlRootElement註釋 - 可能嗎?
- 24. @Override註釋問題
- 25. 不能實現抽象方法和抽象的說法
- 26. Java抽象類實現
- 27. 應該添加toString()方法嗎?
- 28. 在Java的子類中實現抽象方法
- 29. 我應該在源文件的頂部添加標題註釋?
- 30. Eclipse在抽象類中添加抽象方法
您還需要Java 6來利用此註釋。 Java 5不允許你將它放在接口實現上。 – akarnokd 2009-06-17 09:03:21