A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 闪亮未来 高级黑马   /  2013-11-3 17:20  /  1094 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Demo
  2. {
  3.         private int num;
  4.         Demo(int num)
  5.         {
  6.                 this.num=num;
  7.         }
  8.         public boolean equals(Object obj)
  9.         {
  10.                 if (!(obj instanceof Demo))
  11.                         return false;
  12.                 Demo d=(Demo)obj;
  13.                 return num==d.num;
  14.         }
  15. }

  16. class ObjectDemo
  17. {
  18.         public static void main(String[] args)
  19.         {
  20.                 Demo d1=new Demo(5);
  21.                 Demo d2=new Demo(5);
  22.                 System.out.println(d1.equals(d2));
  23.         }
  24. }
复制代码
if (!(obj instanceof Demo))  这一句为什么是这样的,而不是if (!(obj instanceof Object)),  

equals(Object obj) 函数的参数类型是Object类中的啊,肯定不是Demo啊,可是外面传进来的又是Demo类的,父类和子类有点乱了,谁帮忙整理下啊

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 ixiangfeng 于 2013-11-3 17:49 编辑

       if (!(obj instanceof Demo)) 这里的意思是 当obj不是Demo类的实例对象时为真,执行 return false ,  当obj属于Demo类的实例对象时if为假,执行下面的两行代码 Demo d=(Demo)obj;          return num==d.num;  因为只有当obj是Demo的实例对象才能比较 强转是因为多态 实参传进去时自动提升为Object,父类中不能使用.num 所以必须强转回子类Demo才能使用obj.num再进行比较

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
所有类都是Object的子类 如果像你说的if (!(obj instanceof Object)) 永远都是假的  就是无论传什么进去比较都会返回true 即使你传一个int  long 或者Person等任何东西都会返回true ,你想想把数字2,把人、狗都传进去比较返回都是true
回复 使用道具 举报
你要重写的是Demo的equals方法,因为JAVA每个类都是继承Object的,所以Demo自然会继承Object
  1. public boolean equals(Object obj)
  2.         {
  3.                 if (!(obj instanceof Demo))//传入参数是Object类型的,意思就是说可以传入任何对象作为参数,然后传入的参数和Demo相比,看看是否是Demo的实例,如果是                        //Demo的实例,那么,传入的类自然就是Demo类咯
  4.                         return false;
  5.                 Demo d=(Demo)obj;
  6.                 return num==d.num;
  7.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
1,Object是所有类的祖先,所以说你要改成这个if (!(obj instanceof Object)),  没有意义。obj instanceof Object结果都为true,那就失去了if语句的作用。所以不能改。
2,equals(Object obj) 函数的参数类型是Object类中的啊,肯定不是Demo啊---------------Demo继承Object,所以它也可以调用继承下来的equals()方法。只是里面的参数是Object,这时它用的是多态应用。以后学到了即了解了,不必纠结。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
回天之力 发表于 2013-11-3 18:52
1,Object是所有类的祖先,所以说你要改成这个if (!(obj instanceof Object)),  没有意义。obj instanceof  ...

我要的就是你这个答案,不然我一直都很朦胧,多谢,虽然版主没给你技术分,但是我觉得你这个答案很好,解答了我的疑惑
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马