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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 燃灯街 中级黑马   /  2013-6-13 23:45  /  1334 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请问一下下边的java代码,我有点不明白的是equals方法里的else判断,既然obj 已经instanceof Demo了,那 为何还用Demo d=(Demo)obj;进行强转成Demo类型,直接省掉这一句不行吗?另外我想请教一下:如果Demo有父类的话,是不是父类也instanceof Demo?
class Demo{
    private int number;

    public Demo(int number) {
        super();
        this.number = number;
    }
    public boolean equals(Object obj){
        if(!(obj instanceof Demo)){
            return false;
        }
        else{
            Demo d=(Demo)obj;
            return this.number==d.number;
        }
    }
   
}

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

6 个回复

倒序浏览
用Demo d=(Demo)obj;进行强转成Demo类型的原因是,因为传入的参数obj是Object类型的,而Object不能自动转型为Demo类型,故需强制转型。
如果Demo有父类DemoParent的话,如果重写父类的equals方法,应相应的改为instanceof DemoParent.而Demo中的instanceof Demo跟是否有父类是没有关系的,因为测试的是参数obj是否是Demo的实例。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
我觉得你的问题应该属于“多态”的问题,因为如果像你说的直接把Demo d=(Demo)obj 去掉的话,那么怎么用父类引用子类呢。(你说的这种情况应该是自动装箱和拆箱吧)
第二个问题:属于Object的子类的类有很多,比如Demo是Object的子类,并不是每个Object的子类都是  instanceof Demo

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
如果问题解决   请把帖子的类型改为已解决
回复 使用道具 举报
苑永志 发表于 2013-6-14 00:22
用Demo d=(Demo)obj;进行强转成Demo类型的原因是,因为传入的参数obj是Object类型的,而Object不能自动转型 ...

分数给晚了  不过以后看到你  我会加分  答得不错
回复 使用道具 举报
知行 发表于 2013-6-14 14:42
我觉得你的问题应该属于“多态”的问题,因为如果像你说的直接把Demo d=(Demo)obj 去掉的话,那么怎么用父 ...

你也要努力   答得挺好
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马