黑马程序员技术交流社区

标题: 多态向下转型格式? [打印本页]

作者: Geek_001    时间: 2014-6-21 20:45
标题: 多态向下转型格式?
本帖最后由 Geek_001 于 2014-6-22 07:38 编辑

图片的第二行是多态向下转型,格式是不是可以写为:
子类  子类类型名称 = (子类)父类类型名称?

捕获.PNG (13.79 KB, 下载次数: 35)

捕获.PNG

作者: yuZhe_toString    时间: 2014-6-21 21:12
向下转型是不安全的,开发中很少用到向下转型,除非你的对象是先向上转型后再想下转型。
作者: ≥﹏≤我还太年    时间: 2014-6-21 21:22
对、格式没有问题。子类  子类对象名称 = (子类)父类名称;
作者: Geek_001    时间: 2014-6-21 21:34
yuZhe_toString 发表于 2014-6-21 21:12
向下转型是不安全的,开发中很少用到向下转型,除非你的对象是先向上转型后再想下转型。 ...

我能听懂,向下转型是为了可以调用子类特有的方法,但老师写的时候,顺手拈来,我一开始就是记不住怎么写的,
作者: Geek_001    时间: 2014-6-21 21:35
≥﹏≤我还太年 发表于 2014-6-21 21:22
对、格式没有问题。子类  子类对象名称 = (子类)父类名称;

多谢,额这一次记牢了。
作者: a5702727    时间: 2014-6-21 21:44
多态用的地方好多。。
作者: 执笔梦    时间: 2014-6-21 22:18
Geek_001 发表于 2014-6-21 21:34
我能听懂,向下转型是为了可以调用子类特有的方法,但老师写的时候,顺手拈来,我一开始就是记不住怎么写 ...

用多,就会,就理解了,记不记倒没什么吧:)
作者: lindegen    时间: 2014-6-21 22:27
yuZhe_toString 发表于 2014-6-21 21:12
向下转型是不安全的,开发中很少用到向下转型,除非你的对象是先向上转型后再想下转型。 ...

为什么说不安全,举个栗子呀帅哥
作者: Geek_001    时间: 2014-6-21 23:27
执笔梦 发表于 2014-6-21 22:18
用多,就会,就理解了,记不记倒没什么吧

同意你的说法.....................:)
作者: M路    时间: 2014-6-22 05:11
对!就是别把其他子类转成这个这个子类,要不然就编译失败了
作者: yuZhe_toString    时间: 2014-6-22 10:45
lindegen 发表于 2014-6-21 22:27
为什么说不安全,举个栗子呀帅哥

比如说你自定义一个Person类里面有say()方法,然而Object是所有类的超类,Object obj = new Object();
虽然Object与Person有父子关系,你觉得obj可以向下转型成Person吗,obj能调用say方法吗?答案肯定是不能,这就是所谓的向下转型不安全。但是如果你 Object p = new Person(); 子类先向上转型为父类,这种情况 p 可以向下转型为Person.
作者: lindegen    时间: 2014-6-22 14:22
yuZhe_toString 发表于 2014-6-22 10:45
比如说你自定义一个Person类里面有say()方法,然而Object是所有类的超类,Object obj = new Object();
虽 ...

Object obj = new Object() 这样就没有涉及到多态了呀。原来多态就是子类对象向上转型的呀
作者: yuZhe_toString    时间: 2014-6-22 18:23
lindegen 发表于 2014-6-22 14:22
Object obj = new Object() 这样就没有涉及到多态了呀。原来多态就是子类对象向上转型的呀 ...

意思都一样。再比如A类与B类都继承C,C a = new A(); a同样也不能向下转型成B

作者: 波涛    时间: 2014-6-22 19:49
这就是一个强制类型转换啊,调用前要对数据类型有所预知就行,如果预知错误,那么在编译阶段可能ok,但在运行就抛异常了!




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