4-3编程练习中Object类的equals方法重写的问题

4-3编程练习中Object类的equals方法重写的问题

请老师帮忙解答一下:

下面代码运行结果为:

obj1和obj2比较: true
f1和f2比较: true

但是我认为obj1和obj2调用的应该是object类的方法,比较结果应该为false才对。我把鼠标悬停在“ boolean b1 = obj1.equals(obj2);” 这一行,发现确实是调用的object类的方法,但是为什么比较结果是false呢?

public class Test {

 public static void main(String[] args) {
  Fruits f1 = new Fruits("圆的","甜的");
  Fruits f2 = new Fruits("圆的","甜的"); 
  Object obj1 = (Object)f1;
  Object obj2 = (Object)f2;
  boolean b1 = obj1.equals(obj2);
  boolean b2 = f1.equals(f2); 

  System.out.println("obj1和obj2比较: " + b1);
  System.out.println("f1和f2比较: " + b2);
 
  

 }

}

正在回答 回答被采纳积分+1

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

1回答
好帮手慕雪 2018-04-13 16:51:40

这就是多态,运行时多态。编译时走的是Object的equals(),而运行时走的是Fruits的equals()。祝:学习愉快

  • 提问者 慕粉18600882480 #1
    那是不是说明:如果我在Fruits类里面重写了euqals方法,我在main方法里面实例化的两个f1 , f2 的Fruits类的对象,就不能调用Objects类的equals方法了呢? 我想要实现的就是调用Objects类的equals方法比较f1 和 f2 这两个对象
    2018-04-13 17:45:56
  • 好帮手慕雪 回复 提问者 慕粉18600882480 #2
    嗯是的。你可以Object obj1=new Object();Object obj2=new Object(); System.out.println(obj1.equals(obj2));就是调用Objects类的equals方法比较了。
    2018-04-13 18:09:50
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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