为什么对于equals方法我们需要一个Object参数?

时间:2018-12-26 00:19:26

标签: java oop

我当时用java equals方法进行了一些测试,结果发现,如果我的参数不是通用类型的对象,则即使我创建的两个对象都属于该类型,该测试也不会通过。假设我要检查物体是否是动物,我想做的就是写下来:

 public boolean equals(Animal other) {
 *some code*
}

然后我为该方法创建一个测试以比较动物。但是,如果我这样做,则如果我写下来,则测试将失败:

public boolean equals(Object other) {
 *some code*
}

然后进行测试,测试将通过。我知道声明所需类型的对象并尝试对其进行测试是没有用的,但我不明白为什么它不能在良好的天气测试案例中起作用。

2 个答案:

答案 0 :(得分:3)

这很简单,对象类equals的方法签名是这个

public boolean equals(Object obj)

但是,如果您使用equals参数编写Animal方法,那么它将不是对象类中的Overridden equals方法。当您尝试使用.equals()比较对象时,将调用对象类equals

出于这个原因,并且为了明确起见,始终建议使用@Override批注

答案 1 :(得分:1)

equals方法是Java基类Object的一部分,唯一利用它的方法是 override 。要覆盖它,您需要保持相同的签名,该签名将告诉使用equals的所有库而不是基础库调用您的方法。

您的上述代码正在执行重载,与Java编译器完全不同。