黑马程序员技术交流社区

标题: (Demo)obj是什么意思? [打印本页]

作者: 郭孟涛    时间: 2013-2-14 00:53
标题: (Demo)obj是什么意思?


如图,Demo d = (Demo)obj;

这一句是个什么写法? 假如在实例化对象的时候一般不是这么写吗? Demo d = new Demo();

这个(Demo)obj是什么意思?

作者: 罗海云    时间: 2013-2-14 09:09
这是向下转型, 毕老师视频里讲过, 意思就是把Object类型向下转型成Demo型, Demo d = new Demo();这句又是创建一个Demo型的变量了.意思是不一样的
作者: 逍林游    时间: 2013-2-14 09:58
强制转换····
作者: 袭喜悦    时间: 2013-2-14 10:44
这是向下转型, 意思就是把Object类型向下转型成Demo型, 向下转型之后只可以调用object类的属性
作者: 陈科宇    时间: 2013-2-14 11:57
朋友,你首先要搞清楚instanceof的含义。它判断运算符前面的对象是否是运算后面的类的对象。这里有一个原则。instanceof判定的范围必须保证前面的对象与后面的类有直接或间接父子关系,否则会报错,所以这里采用Object来容纳各种可能放进去的对象类型。之所以需要强制转换。是因为在使用instanceof判定时,是使用对象运行时的类型来判定。举个例子:
DemoFather df=new Demo(5);//假定5为num的值
Demo d=new Demo(5).
执行d.equals(df)时,由于会执行Object obj=df;
现在堆内存中的对象的声明类型为Object类型,所以必须进行强制转换成Demo类型,才能调用num属性。

作者: walkonby    时间: 2013-2-15 10:10
前面instanceof  判断就是判断传进来的对象是不是Dome类或者他的子类或者是Demo类这个体系的对象  如果不是就直接return了
如果是Demo类这个体系的对象我把他从Object类型转换为Demo类型 这个是可以的 因为上面已经判断了 能走到这一步的必然是Demo这个体系的对象
作者: Rancho_Gump    时间: 2013-2-15 11:22
“已经有了判断,在转为Demo类型。貌似就多此一举了”这个不多此一举。
如果不向下转型,那么此对象是Object类类型,只能调用Object类里可访问的方法或变量。
4楼讲到了这点 “现在堆内存中的对象的声明类型为Object类型,所以必须进行强制转换成Demo类型,才能调用num属性。”

作者: 张晋瑜    时间: 2013-2-15 15:06
(Demo)就是数据类型强制转换
作者: 马铿    时间: 2013-2-18 17:13
向下转型,Demo d = (Demo)obj;只有Demo是obj这个类型的子类才可以这样做,如果Demo跟obj类型没有任何关系,则不能转
此时d的方法都是子类的具体方法,以及覆盖父类的方法
作者: 寇弘禄    时间: 2013-2-18 22:26
这个属于多态吧,不可以将一个Object类型的数据赋给一个Demo类型的数据,前面用instenceof判断了一下这个obj,如果是Demo类的,则需将其转为Demo后才可赋给Demo,如果不是Demo类的则不能转换。




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