黑马程序员技术交流社区

标题: 基础部分的疑问 [打印本页]

作者: 燃灯街    时间: 2013-6-13 23:45
标题: 基础部分的疑问
请问一下下边的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;
        }
    }
   
}


作者: 苑永志    时间: 2013-6-14 00:22
用Demo d=(Demo)obj;进行强转成Demo类型的原因是,因为传入的参数obj是Object类型的,而Object不能自动转型为Demo类型,故需强制转型。
如果Demo有父类DemoParent的话,如果重写父类的equals方法,应相应的改为instanceof DemoParent.而Demo中的instanceof Demo跟是否有父类是没有关系的,因为测试的是参数obj是否是Demo的实例。
作者: 知行    时间: 2013-6-14 14:42
我觉得你的问题应该属于“多态”的问题,因为如果像你说的直接把Demo d=(Demo)obj 去掉的话,那么怎么用父类引用子类呢。(你说的这种情况应该是自动装箱和拆箱吧)
第二个问题:属于Object的子类的类有很多,比如Demo是Object的子类,并不是每个Object的子类都是  instanceof Demo
作者: 袁梦希    时间: 2013-6-14 17:57
如果问题解决   请把帖子的类型改为已解决
作者: 袁梦希    时间: 2013-6-14 17:58
苑永志 发表于 2013-6-14 00:22
用Demo d=(Demo)obj;进行强转成Demo类型的原因是,因为传入的参数obj是Object类型的,而Object不能自动转型 ...

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

你也要努力   答得挺好




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2