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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cyc523633157 中级黑马   /  2014-8-3 18:52  /  6685 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 cyc523633157 于 2014-8-4 22:11 编辑

请问什么是向上转型和向下转型?有点难以理解。

17 个回复

正序浏览
本帖最后由 xiaoxiaofeng 于 2014-8-4 22:18 编辑

上转型:子类向父类转型即多态的实现。下转型:父类向子类强制转换。
回复 使用道具 举报
向上就是向父类转,向下就是向子类转
回复 使用道具 举报
LFW 中级黑马 2014-8-4 12:38:58
16#
Animal a = new Cat();Cat c = (Cat)a;这就是向下转型。猫对象都是动物,自动向上转型了。因为父类对象指向子类对象,这个动物a指向的其实是猫的实例,所以它能够强制向下转型,(这时Dog d = Dog(a)会出错,因为a是动物同时是猫,而不能是狗)。多态的好处是,猫狗猪都会吃东西,那么Animal c/d/p都可以作为Animal类型的变量接收,代码复用性大大提高(这就用到了向上转型)。但是猫会抓老鼠猪不会抓老鼠,所以具体的动物又有具体的功能,这就需要向下转型,如果是猫类,那么动物a instanceof 猫就判断成功,就能向下转型Cat c = (Cat)a,这个动物就确定是猫,它就可以抓老鼠了。((((((((((((((((((讲的有点乱,结合着毕老师的例子来看(我是靠回忆给你说的,不当之处望谅解)。
回复 使用道具 举报
向上转型就是子类转成父类,这是自动转型的;向下转型就是父类转为子类,这就要强制转换。
回复 使用道具 举报
向上转型就是将子类对象赋给父类引用,向下转型就是将父类对象强制转换成子类引用.这是多态性的体现!
回复 使用道具 举报
A是B的父类,如果定义了A  a = new B();则是向上转型,父类引用指向子类对象。如果把B  b = (B)c
回复 使用道具 举报
向上转型就是转为其父类,向下转型就是转为其父类的子类
回复 使用道具 举报
来学习的
回复 使用道具 举报
子类转父类的类型是向上转型  父类型的转子类的是向下转型
回复 使用道具 举报
小乖乖灬浩歌 来自手机 中级黑马 2014-8-3 20:27:49
9#
子类对象指向父类引用  就是向上转型  父类引用无法使用子类对象特有得方法  就需要转化成子类类型  这就是向下转型
回复 使用道具 举报
哈哈,经典!!!毕老师太棒了!!!!
回复 使用道具 举报
cyc523633157 发表于 2014-8-3 19:43
恩,,为什么不能调用子类方法,

因为父类里没有这个方法

毕老师有个功能是看电影,他父亲却没有这功能,现在毕老师假扮成他父亲,这时候毕老师的朋友找他去看电影,但是这位朋友开门见到的是“毕老师的父亲”,他要和毕老师看电影,而不是“毕老师的父亲”。

视频里的例子差不多就这样吧。
回复 使用道具 举报
怀念黑海岸 发表于 2014-8-3 19:51
int a =3;
        long b =a;
        short c=(short)a;

恩,你回答的太棒了。
回复 使用道具 举报
        int a =3;
        long b =a;
        short c=(short)a;
就拿基本数据给你说吧,你有一个int类型的数据a,你吧他赋值给范围更大的long数据类型,这是没问题的,小范围的数据赋值给大范围的变量,自动向上转型。
但是你如果要吧a赋值给比变量a范围还小的变量那么他会提示你,这样子做会导致损失精度,编译就过不了,这是需要吧a进行强制转型。所以强制向下转型。
回复 使用道具 举报
kakasa 发表于 2014-8-3 19:16
多态么,被父类引用指向子类对象不能调用子类方法,

恩,,为什么不能调用子类方法,
回复 使用道具 举报
多态么,被父类引用指向子类对象不能调用子类方法,
回复 使用道具 举报
在java中所有类的父类都是object。若有类A。A转为object,则为向上转型!反之,向下转型!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马