忘记提@覆盖,同时重新定义equals和hashCode
问题描述:
提供类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
关键字,对不对?
答
@Override
注释可以防止意外更改。 例如, 您可能会无意中重命名方法 或更改其可见性,参数列表或返回类型。
如果没有@Override
注释, 编译器将不会提出有关此类更改的任何问题, 但可能您的程序将不再按预期工作。 而且可能很难检测到由此类更改引起的错误。 例如,应该相等的两个实例 将不再相同,因为Object.equals
将用于比较而不是MyClass.equals
。
随着@Override
注释, 编译器将能够告诉你出事了, 任何上述变化将很可能导致不父类匹配任何方法的方法声明, 这是编译时错误。
换句话说, 加入@Override
注释, 即使可选的,因为在这个例子中, 是为自己的保护。
没什么,真的。 '@ Override'只是告诉读者你的代码的一种方式,它覆盖了超类中的一个方法。 – Sweeper