2017-11-25 211 views
2

提供類MyClass,我沒有重新定義equals()和hashCode()方法,但我忘了提及的關鍵詞@Override如:忘記提@覆蓋,同時重新定義equals和hashCode

public class MyClass { 
    public boolean equals(Object obj){ 
     //Content omitted 
    } 

    public int hashCode(){ 
     //Content omitted 
    } 

    //Remainder omitted 
} 

會是什麼在MyClass的設計中出現這種錯誤的後果是什麼?

UPDATE:如果我尊重父類的方法簽名,同時重新定義我的方法的亞型類,我還是重寫給定的方法,雖然我不提@Override關鍵字,對不對?

+0

沒什麼,真的。 '@ Override'只是告訴讀者你的代碼的一種方式,它覆蓋了超類中的一個方法。 – Sweeper

回答

3

@Override註釋可以防止意外更改。 例如, 您可能會無意中重命名方法 或更改其可見性,參數列表或返回類型。

如果沒有@Override註釋, 編譯器將不會提出有關此類更改的任何問題, 但可能您的程序將不再按預期工作。 而且可能很難檢測到由此類更改引起的錯誤。 例如,應該相等的兩個實例 將不再相同,因爲Object.equals將用於比較而不是MyClass.equals

隨着@Override註釋, 編譯器將能夠告訴你出事了, 任何上述變化將很可能導致不父類匹配任何方法的方法聲明, 這是編譯時錯誤。

換句話說, 加入@Override註釋, 即使可選的,因爲在這個例子中, 是爲自己的保護。

相關問題