java在重新定义equals和hashcode时忘记提到@Override
给定一个类MyClass
,其中我重新定义了equals()和hashCode()方法,但是我忘了提到关键字@Override
,例如:
public class MyClass {
public boolean equals(Object obj){
//Content omitted
}
public int hashCode(){
//Content omitted
}
//Remainder omitted
}
这种错误会对MyClass
的设计造成什么后果
更新:因此,如果我在子类型类中重新定义我的方法时尊重超类型类的方法签名,我仍然覆盖给定的方法,尽管我没有提到@Override
关键字,对吗
# 1 楼答案
@Override
注释可以保护您免受意外更改。 例如 您可能会意外地重命名该方法, 或者更改其可见性、参数列表或返回类型没有
@Override
注释, 编译器不会对这些更改提出任何问题, 但你的程序可能不再按预期工作。 而且,检测这些变化引起的错误可能非常困难。 例如,两个应该相等的实例, 将不再相等,因为Object.equals
将用于比较,而不是MyClass.equals
使用
@Override
注释, 编译器会告诉你出了什么问题, 由于上述任何更改都很可能导致方法声明与父类中的任何方法都不匹配, 这是一个编译时错误换句话说, 添加
@Override
注释, 即使在本例中是可选的, 是为了保护你自己