equals方法后面括号里的参数问题

equals方法后面括号里的参数问题

public boolean equals(Object obj){
    if(obj==null)
        return false;
    Animal temp=(Animal)obj;
    if(this.getName().equals(temp.getName()) && (this.getMonth()==temp.getMonth()))
        return true;
    else
        return false;
}

我的问题是:

1、这是对equals方法的重写,我觉得特别逗的是,在课程里,one和two本身就是Animal的对象,one.equals(two),传的two本就是Animal的对象,又不是Object类的对象,在重写的方法里还强转什么:Animal temp=(Animal)obj;?

2、我不懂的是,在不考虑课程之后重载的情况(它将参数改为了Animal类对象),只考虑现在重写的情况下,equals方法后面括号里传的参数明明应该是Object类的对象,课程还能把Animal的对象two给传进去,要知道这个two可是Animal的对象,不是Object类的对象,这到底是怎么回事?

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,你的理解很正确,就是这个意思。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

好帮手慕珊 2019-05-04 14:29:12

你好!下面分别对你的问题进行回复

1、首先,因为是重写,所以方法参数和被重写的方法相同,所以此处的参数是Object。

关于强转的问题,Object类是没有getName()和getMonth()方法的,不强制转换就会报错。

2、关于参数传递的问题,在其他问题中也给同学回复了。这是因为父类作为方法参数时,在进行方法调用时可以传递子类对象作为方法参数。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!


  • 提问者 鱼儿0001 #1
    老师,two本身就是Animal类的对象,这点没错吧?two被当做参数传进去,莫名其妙的成为了Object类的对象,然后必须强转成Animal类的对象,老师你是这个意思吗?
    2019-05-05 16:31:42
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师