有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    @Override注释可以保护您免受意外更改。 例如 您可能会意外地重命名该方法, 或者更改其可见性、参数列表或返回类型

    没有@Override注释, 编译器不会对这些更改提出任何问题, 但你的程序可能不再按预期工作。 而且,检测这些变化引起的错误可能非常困难。 例如,两个应该相等的实例, 将不再相等,因为Object.equals将用于比较,而不是MyClass.equals

    使用@Override注释, 编译器会告诉你出了什么问题, 由于上述任何更改都很可能导致方法声明与父类中的任何方法都不匹配, 这是一个编译时错误

    换句话说, 添加@Override注释, 即使在本例中是可选的, 是为了保护你自己