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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郭孟涛 高级黑马   /  2013-2-14 00:53  /  6223 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文



如图,Demo d = (Demo)obj;

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

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

评分

参与人数 1黑马币 +9 收起 理由
Rancho_Gump + 9

查看全部评分

9 个回复

倒序浏览
这是向下转型, 毕老师视频里讲过, 意思就是把Object类型向下转型成Demo型, Demo d = new Demo();这句又是创建一个Demo型的变量了.意思是不一样的

评分

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

查看全部评分

回复 使用道具 举报
强制转换····
回复 使用道具 举报
这是向下转型, 意思就是把Object类型向下转型成Demo型, 向下转型之后只可以调用object类的属性
回复 使用道具 举报
朋友,你首先要搞清楚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属性。

评分

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

查看全部评分

回复 使用道具 举报
前面instanceof  判断就是判断传进来的对象是不是Dome类或者他的子类或者是Demo类这个体系的对象  如果不是就直接return了
如果是Demo类这个体系的对象我把他从Object类型转换为Demo类型 这个是可以的 因为上面已经判断了 能走到这一步的必然是Demo这个体系的对象

点评

按这个意思,已经有了判断,在转为Demo类型。貌似就多此一举了。 是不是再转换为Demo的数据类型,例如 int Sring型呢?  发表于 2013-2-15 10:28

评分

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

查看全部评分

回复 使用道具 举报
“已经有了判断,在转为Demo类型。貌似就多此一举了”这个不多此一举。
如果不向下转型,那么此对象是Object类类型,只能调用Object类里可访问的方法或变量。
4楼讲到了这点 “现在堆内存中的对象的声明类型为Object类型,所以必须进行强制转换成Demo类型,才能调用num属性。”
回复 使用道具 举报
(Demo)就是数据类型强制转换
回复 使用道具 举报
马铿 中级黑马 2013-2-18 17:13:57
9#
向下转型,Demo d = (Demo)obj;只有Demo是obj这个类型的子类才可以这样做,如果Demo跟obj类型没有任何关系,则不能转
此时d的方法都是子类的具体方法,以及覆盖父类的方法
回复 使用道具 举报
这个属于多态吧,不可以将一个Object类型的数据赋给一个Demo类型的数据,前面用instenceof判断了一下这个obj,如果是Demo类的,则需将其转为Demo后才可赋给Demo,如果不是Demo类的则不能转换。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马