4 回答

TA貢獻1820條經驗 獲得超10個贊
每次覆蓋一個方法時使用它有兩個好處。這樣做是為了讓您可以利用編譯器檢查來確保在您認為自己真正重寫方法時。這樣,如果您犯了一個錯誤拼寫方法名稱或者沒有正確匹配參數的常見錯誤,您將收到警告,您的方法實際上并沒有像您認為的那樣覆蓋。其次,它使您的代碼更容易理解,因為當覆蓋方法時更加明顯。
此外,在Java 1.6中,您可以使用它來標記方法何時實現具有相同優點的接口。我認為最好有一個單獨的注釋(比如@Implements
),但它總比沒有好。

TA貢獻1784條經驗 獲得超7個贊
我認為它最有用的是編譯時提醒,方法的意圖是覆蓋父方法。舉個例子:
protected boolean displaySensitiveInformation() { return false;}
您經常會看到類似于上述方法的內容,它會覆蓋基類中的方法。這是此類的重要實現細節 - 我們不希望顯示敏感信息。
假設此方法在父類中更改為
protected boolean displaySensitiveInformation(Context context) { return true;}
此更改不會導致任何編譯時錯誤或警告 - 但它會完全更改子類的預期行為。
要回答您的問題:如果缺少超類中具有相同簽名的方法指示錯誤,則應使用@Override注釋。

TA貢獻1877條經驗 獲得超6個贊
這里有很多好的答案,所以讓我提供另一種方式來看待它......
編碼時沒有矯枉過正。鍵入@override不會花費任何費用,但如果拼寫錯誤的方法名稱或簽名稍有錯誤,可能會節省大量成本。
這樣考慮一下:當你在這里導航并輸入這篇文章的時候,你幾乎花了更多的時間,而不是在你的余生中用@foreride打字; 但它阻止的一個錯誤可以節省你的時間。
Java盡其所能確保您在編輯/編譯時沒有犯任何錯誤,這是一種幾乎免費的方法來解決在全面測試之外無法以任何其他方式阻止的整類錯誤。
你能想出一個更好的Java機制來確保當用戶想要覆蓋一個方法時,他確實做到了嗎?
另一個簡潔的效果是,如果你不提供注釋,它將在編譯時警告你,你不小心覆蓋了父方法 - 如果你不打算這樣做,這可能是重要的。

TA貢獻1943條經驗 獲得超7個贊
我總是使用標簽。這是一個簡單的編譯時標志,可以捕獲我可能犯的小錯誤。
它會捕捉到的東西tostring()
而不是toString()
小事情有助于大型項目。
添加回答
舉報