为了账号安全,请及时绑定邮箱和手机立即绑定

关于equals( )方法重写的疑问?

重写equals( )方法时,

if (getClass() != obj.getClass())

return false;

执行完后,已经保证了原有对象和传入对象obj的类型相同,

为什么后面仍要执行

Dog other = (Dog) obj;

将传入对象obj转化为原有对象的Dog类型?

不可以这样写吗?如下:

@Override

public boolean equals(Object obj) {

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false;

if (age != obj.age)

return false;

return true;

}


正在回答

1 回答

Object类是所有类的父类,跟Dog类不是同一类型的。需要向下转型成Dog类,这样才能比较。

1 回复 有任何疑惑可以回复我~
#1

幕布斯9297580 提问者

虽然不确定是否正确,但感觉这个回答逻辑上完全说得通,非常感谢!
2018-08-31 回复 有任何疑惑可以回复我~
#2

忘记过去丶

在判断完类对象属性名相同后,我们要比较属性值。之前我们用的一直是object类的类型进行的比较。而在我们继续判断dog类的属性值时,如果用object类型,那就没办法进行“值”的比较了。所以,应该也转换成dog类型,这样才能进行比较。可能说的不如1楼简洁,希望能够方便你的理解。
2018-10-06 回复 有任何疑惑可以回复我~
#3

weixin_慕仰7456056 回复 忘记过去丶

老师,我还是不明白,调用equals()时,传入的不就是Dog类吗,为什么变成了object类了
2019-08-04 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

关于equals( )方法重写的疑问?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信