重写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、重写的是Object类的equals()方法。
2、同学理解的不错。
3、是的。
4、Animal temp =(Animal)obj;是将Object类强转为Animal类。这里是向下转型。在后边多态时会详细讲解,这里只是用了一下。同学可以先向后学习,学过后边的内容再看前面的,会很容易理解。
5、obj转换为Animal类对象后,可以访问Animal类的属性和方法。
6、不可以,obj是传递进来的参数,相当于前边已经定义过了,这里在Animal obj会报错。同学可以自己试试。
7、是的。
8、month是int类型,是数值,所以这里只是比较数值是否相等。不是对象,也没有引用地址之说。
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星