黑马程序员技术交流社区

标题: 什么是向上转型,什么是向下转型? [打印本页]

作者: 想太多    时间: 2016-7-8 22:55
标题: 什么是向上转型,什么是向下转型?
谁能帮我仔细解释一下什么是向上转型,什么是向下转型,我不是很懂。
作者: 梦想天空分外蓝    时间: 2016-7-8 22:57
.......................
作者: 看需求    时间: 2016-7-8 22:58
父类引用指向子类对象就是向上转型
作者: 看需求    时间: 2016-7-8 22:59
向下转型就是将上级对象强制转成子类的
作者: Ly丶Roman    时间: 2016-7-8 23:02
同上~ 向下转型要在向上转型的前提下哦
作者: zzc359899221    时间: 2016-7-8 23:10
父类引用指向子类对象就是向上转型;将向上转型后的对象有强制装换为其子类的类型!
作者: warku    时间: 2016-7-8 23:48
借楼问个问题,转型作用是什么?  做的练习好像没有这方面的~~

作者: Insomnia!    时间: 2016-7-9 06:28
前者是多态,后者是解决多态弊端的
作者: 新人—小明同学    时间: 2016-7-9 16:29
先有向上才有向下..
作者: zhangwenjin    时间: 2016-7-9 22:14
Person p = new Student(); 这就是向上转型
Student s = (Student)p; 这就是向上转型
作者: aslwq2012    时间: 2016-7-10 18:43
向上转型就是类型的提升,即父类引用指向子类的对象;
向下转型就是类型强制转换
作者: rogerpbj    时间: 2016-7-10 19:44
一般用的比较多的,是对象之间,主要父子类之间的类型互相转换~~多看下视频,很好理解的
作者: 迅雷    时间: 2016-7-10 21:40
多态,要理解的话最好画个内存图
作者: yabiaodou    时间: 2016-7-10 22:26
Person p = new Student(); 这就是向上转型
Student s = (Student)p; 这就是向上转型
笔记上这么说!!!
作者: 糊图    时间: 2016-7-10 22:45
多理解一下多态,就可以理解清楚了,别人给你说也起不了太大的作用
作者: DDV    时间: 2016-7-10 22:55
Person p = new Student(); 这就是向上转型
Student s = (Student)p; 这就是向上转型
笔记上这么说!!!
作者: 额滴神啊    时间: 2016-7-10 23:02
同求 虽然我知道你是什么目的
作者: 愿望变美    时间: 2016-7-11 23:28
Person p = new Student(); 这就是向上转型, 父类在上面, 将Student类转为Person类, 即子类转为父类
Student s = (Student)p; 这就是向下转型, 子类在下面, 将父类p强制转化为子类s, 就是向下转型了,  p是已有的父类, 才能转,,,

作者: zhangjiesss    时间: 2016-7-22 17:55
好好看一下多态这部分,楼上说的理解理解
作者: coco2016    时间: 2016-7-22 18:27
面向对象中,向上转型就是父类对象指向子类引用,向下转型就是将父类对象转换成子类对象,必须先有向上转型才有向下转型。。
作者: cat73    时间: 2016-7-22 18:43
男人 属于 人
人 属于 动物
那么:
我说一个人是动物,这就是人到动物的向上转型。
我说一个人是男人,这就是人到男人的向下转型。

作者: 小福点儿    时间: 2016-7-22 22:55
了解了.有压力啊
作者: qetu001212    时间: 2016-7-22 23:05
这个是多态中的,向上转型就是父类引用指向子类对象,向下转型就是将父类引用转换为子类引用
作者: 李铮    时间: 2016-7-22 23:51
感觉这个没有什么实际的意义呢
作者: javaee王虎    时间: 2016-7-23 08:31
向上就是子类转父类
向下就是父类转子类
作者: wei451341693    时间: 2016-7-23 08:49
向下转型的前提一定是存在多态,当父类中有共享的方法,为了方便调用简化操作,一般都会向上转型,如果一个方法父类没有,子类有,那么在多态的前提下要向下转型才可以用到子类的方法
作者: wyq0627java11    时间: 2016-7-23 10:30
向上转型
*         多态本身的父类引用指向子类对象就是  将子类对象向上转型
* 向下转型
*        如果之前已经是一个子类对象,提升成了父类引用,就可以强制向下转为子类引用
                                                Zi zi = new Zi();
                                                Fu fu = new Fu();
                                                //多态
                                                Fu fz = new Zi();  //父类引用指向子类对象
                                             //这时候可以调用父类方法,但按子类的方法执行(即如有方法重写,按重写方法执行,多态),不能调用父类没有的方法。
                                                fz.method2();  //method2() 是子类继承父类并重写的方法
                                                //fz.method(); //method() 是子类中特有的方法,这时不能被fz调用
                                               
                                                //向下转型(强制类型转换)
                                                //如果之前已经是一个子类对象,提升成了父类引用,就可以强制向下转为子类引用
                                                Zi zi2 = (Zi)fz;  //fz之前是通过向上转型得到的
                                                //这时候zi2可以调用子类所有的方法(包括从父类继承的),并按子类方法执行
                                                zi2.method();
                                                zi.method2();
                                               
                                                //fu引用指向的对象,创建对象是就是父类对象,无法转为子类对象
                                                //类型转换异常是一个运行时异常。即编译时不报错,运行时报错的异常
                                                Zi zi3 = (Zi)fu; //这个就不对了

                                        * 父类引用指向子类对象时,向上转型相当于给儿子带了一个父亲的面具!
                                        * 向下转型时,相当于又把面具给摘下来了。
                                        * 而真实的父亲,并不能向下转型,因为父亲根本不带面具,所以也没办法摘下来!


作者: Michalel_yan    时间: 2016-7-24 00:21
不懂的地方,多看看视频,然后多敲敲代码就好了




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