对于2-2本节课最后的一点问题
1、在课程里,写了两个equals方法,一个是对Object类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;
}
public boolean equals(Animal obj) {
if(obj==null)
return false;
if(this.getName().equals(obj.getName()) && (this.getMonth()==obj.getMonth()))
return true;
else
return false;
}
在测试类里,
Animal one=new Animal("花花",2);
Animal two=new Animal("花花",2);
boolean flag=one.equals(two);
声明实例化两个Animal的对象one、two,one调用equals方法与two做比较,那么,我糊涂的是两个equals方法看起来都能被one调用,在这里调用的是哪一个方法?为什么会调用这个equals方法而不是那个equals方法?
2、子类可以通过重写equals方法的形式,改变比较的内容。
那么,老师,子类是否能通过重载父类equals方法的形式,也实现改变比较的内容?因为看起来,重载可以改变参数、改变方法体内的内容,似乎没问题,但是我不确定。
还有,老师,我们可以直接重载父类的方法吗?因为重载的要求之一是:必须在同一类中才能重载!
3、老师,当我们不重写Objcet类的equals方法,直接继承Object中的equals方法,euqals后面括号里的参数得是Objce类的对象才行,那么,把Animal的对象two传进去去做比较,岂不是问题?何况one调用euqals时,one自己也是Animal的对象,这是怎么回事?
正在回答
关于同学的问题回答如下:
1、调用的重载的equals()方法,因为传入的参数时Animal类型的,所以调用的时重载的equals()方法,
2、可以重载equals()方法改变比较的内容。可以直接重载父类的方法,这样相当于因此了重写的方法。
3、不重写equalse()方法也是可以的。这里可以隐式将Animal类型转换为Object类型进行调用equals(),这些将在多态中讲到。同学可以继续向后学习。
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星