許多 Java 初學者會問:重寫 toString() 等方法時,如果不加 @Override 註解,程式還能跑嗎?會不會變成「沒重寫成功」?
簡短回答:程式依然能編譯、執行,重寫行為不會改變。@Override 並非語法強制要求,而是一個「編譯期檢查工具」與「程式碼文檔標記」。
假設父類有一個方法:
public void test(int i) { System.out.println(i); }
子類想重寫,但手滑把參數寫成 float:
// 錯誤示範:漏加 @Override
public void test(float i) { System.out.println(i + 1); }
若 沒加 @Override,編譯器視為「新增一個重載方法」,不報錯。執行時呼叫 test(1) 仍會跑父類邏輯,產生極難排查的隱藏 Bug。
若 加上 @Override,編譯器立即報錯:「方法未正確重寫父類方法」,強迫你修正參數類型。
閱讀程式碼時,看到 @Override 即可瞬間知道:此方法覆寫自父類或介面,不需跳轉去查父類定義,極大提升維護效率。
Java 6 起 @Override 也可用於「實作介面方法」,進一步擴大了檢查範圍。