重写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;
    }

老师,关于重写euqals方法,我看了好几遍,也手打了代码,但仍然有几点问题:
1、这重写的是Objecr类的equals方法吧,不是String类的equals方法吧?
2、equals方法后面括号里的参数是(Object obj),所以传进来的参数是老祖宗Obejct类的对象,这没错吧?
3、当对象为null,没有比较的意义,所以直接return false吗?
4、Animal temp=(Animal)obj;,老师这里的意思是把传参传进来的Object类对象obj强制转换为Animal类的对象?
说实话,以前学强制转换时,课程里可从来没有教过类的强制转换,都是基本数据类型的强制转换。所以一时看懵
了。强制转换,是大类型向小类型转换时使用的。也就是说,Object类比Animal类大?在这里,Object类的对象
obj必须通过强制类型转换成小的类Animal的对象,是这意思吗?
5、如果我的想法成立,obj强转为Animal的对象,那么,老师,现在的obj就可以调用Animal的可以访问的属性
和方法了?它如今和this所代表的对象一样,都是Animal的对象了?
6、Animal temp=(Animal)obj;
老师,为啥强转后,要用temp接替强转后的obj?写成:Animal obj=(Animal)obj;难道不可以吗?
7、if(this.getName().equals(temp.getName()) && (this.getMonth()= =temp.getMonth()))。
在这里,this和temp调用的getName()和getMonth()都是Animal类的方法吧?
8、this.getMonth()= =temp.getMonth()
老师,在上节课2-1里,= =比的是两个引用的地址是否相同(地址里存的是对象),但是在这里= =
比的还是两个引用的地址是否相同吗?


正在回答

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

1回答

同学你好,关于同学的问题,回答如下:

1、重写的是Object类的equals()方法。

2、同学理解的不错。

3、是的。

4、Animal temp =(Animal)obj;是将Object类强转为Animal类。这里是向下转型。在后边多态时会详细讲解,这里只是用了一下。同学可以先向后学习,学过后边的内容再看前面的,会很容易理解。

5、obj转换为Animal类对象后,可以访问Animal类的属性和方法。

6、不可以,obj是传递进来的参数,相当于前边已经定义过了,这里在Animal obj会报错。同学可以自己试试。

7、是的。

8、month是int类型,是数值,所以这里只是比较数值是否相等。不是对象,也没有引用地址之说。

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

  • 鱼儿0001 提问者 #1
    老师,1、经过强制转换后的obj,是不是和this一样都是Animal的对象了? 2、老师,给对象起名字是不是跟给变量起名字一样,都是不同重名?
    2019-05-02 11:21:35
  • 好帮手慕珊 回复 提问者 鱼儿0001 #2
    你好!是的,经过强制类型转换后,就成为Animal对象了。另外,给对象起名字跟变量是一样的。祝学习愉快!
    2019-05-04 10:43:21
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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