我当时用java equals方法进行了一些测试,结果发现,如果我的参数不是通用类型的对象,则即使我创建的两个对象都属于该类型,该测试也不会通过。假设我要检查物体是否是动物,我想做的就是写下来:
public boolean equals(Animal other) {
*some code*
}
然后我为该方法创建一个测试以比较动物。但是,如果我这样做,则如果我写下来,则测试将失败:
public boolean equals(Object other) {
*some code*
}
然后进行测试,测试将通过。我知道声明所需类型的对象并尝试对其进行测试是没有用的,但我不明白为什么它不能在良好的天气测试案例中起作用。
答案 0 :(得分:3)
这很简单,对象类equals
的方法签名是这个
public boolean equals(Object obj)
但是,如果您使用equals
参数编写Animal
方法,那么它将不是对象类中的Overridden
equals方法。当您尝试使用.equals()
比较对象时,将调用对象类equals
出于这个原因,并且为了明确起见,始终建议使用@Override
批注
答案 1 :(得分:1)
equals
方法是Java基类Object
的一部分,唯一利用它的方法是 override 。要覆盖它,您需要保持相同的签名,该签名将告诉使用equals
的所有库而不是基础库调用您的方法。
您的上述代码正在执行重载,与Java编译器完全不同。