向下转型
与向上转型相对应的就是向下转型了。向下转型是把父类对象转为子类对象。(请注意!这里是有坑的。)

案例驱动
先看一个例子:

Animal a = new Cat();
Cat c = (Cat) a;
c.eat();
//输出  我吃鱼
Dog d = (Dog) a;
d.eat();
// 报错 : java.lang.ClassCastException
Animal a1 = new Animal();
Cat c1 = (Cat) a1;
c1.eat();
// 报错 : java.lang.ClassCastException

为什么第一段代码不报错呢?相比你也知道了,因为a本身就是Cat对象,所以它理所当然的可以向下转型为Cat,也理所当然的不能转为Dog,你见过一条狗突然就变成一只猫这种操蛋现象?

而a1为Animal对象,它也不能被向下转型为任何子类对象。比如你去考古,发现了一个新生物,知道它是一种动物,但是你不能直接说,啊,它是猫,或者说它是狗。

向下转型注意事项
向下转型的前提是父类对象指向的是子类对象(也就是说,在向下转型之前,它得先向上转型)
向下转型只能转型为本类对象(猫是不能变成狗的)。

大概你会说,我特么有病啊,我先向上转型再向下转型??

我们回到上面的问题:喂动物吃饭,吃了饭做点什么呢?不同的动物肯定做不同的事,怎么做呢?

public void eat(Animal a){if(a instanceof Dog){  Dog d = (Dog)a;d.eat();d.run();//狗有一个跑的方法      } if(a instanceof Cat){  Cat c = (Cat)a;c.eat();System.out.println("我也想跑,但是不会"); //猫会抱怨    } a.eat();//其他动物只会吃
}eat(new Cat());
eat(new Cat());
eat(new Dog());
//.....

现在,你懂了么?这就是向下转型的简单应用,可能举得例子不恰当,但是也可以说明一些问题。
————————————————

原文链接:https://blog.csdn.net/qq_31655965/article/details/54746235

向下转型(通俗易懂)相关推荐

  1. java 泛型向下转型_Java向上转型和向下转型(附具体样例)

    Java向上转型和向下转型(附具体样例) 熬夜整理的关于Java向上和向下转型的样例,很的通俗易懂哦~~~~ 一.向上转型 package com.sheepmu; class Animal { pu ...

  2. 【Java挠头】继承、抽象、接口、多态、向上转型、向下转型等精妙干货

    –本文摘要–     1.本文的目标读者:是了解Java基础,且对面向对象概念有所了解,但是对Java中继承.抽象类.接口.多态等等概念搞不清的初学者.     2.本文的内容摘要:讲述Java中的一 ...

  3. Object类 任何类都是object类的子类 用object对象接收数组 object类的向上向下转型...

    任何类都是object类的子类 用object对象接收数组 object类的向上向下转型 转载于:https://www.cnblogs.com/qingyundian/p/7744351.html

  4. JavaWeb学习笔记①——Java向下转型在JavaEE中运用——登陆验证

    在学习JavaEE的过程中慢慢了解到Java中编程思想的优秀设计,以下将是一个多态-向下转型的示例,该实例是在Servlet-过滤器中的登陆验证的示例,代码中运用向下转型解决问题 import jav ...

  5. java多态上转下_(转)java的多态(向上转型、向下转型)

    在我的明白:java的向上和向下转型可以看成是类型的转换. ---------------- 版权声明:本文为CSDN博主「ldsh304」的原创文章,遵照CC 4.0 BY-SA版权协议,转载请附上 ...

  6. 重新精读《Java 编程思想》系列之向上转型与向下转型

    前言 今天重读了一下向上转型与向下转型,有些新的体会,了解了向上转型的好处,及如何向下转型.在此分享给大家. 向上转型 向上转型是用来表现新类和基类之间的关系.在传统中,由导出类转型成基类,在继承图中 ...

  7. Java 转型问题(向上转型和向下转型)

    Java 转型问题其实并不复杂,只要记住一句话:父类引用指向子类对象. 什么叫父类引用指向子类对象? 从 2 个名词开始说起:向上转型(upcasting) .向下转型(downcasting). 举 ...

  8. 多态Poly中的向上/下转型 Upcast/Downcast

    [参考资料]马克-to-win java中多态polymorphism,向上转型和动态方法调度有什么用? java中什么叫多态,动态方法调度(dynamic method dispatch)? jav ...

  9. Java转型(向上或向下转型)

    在Java编程中经常碰到类型转换,对象类型转换主要包括向上转型和向下转型. 5.13.1 向上转型 我们在现实中常常这样说:这个人会唱歌.在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就 ...

最新文章

  1. eix安装_Windwos U盘PE制作与系统安装
  2. 当编程语言掌握在企业手中,是生机还是危机?
  3. jzoj4739-[雅礼联考GDOI2017模拟9.2]Ztxz16学图论【LCT,树状数组】
  4. js IE和Firefox下event处理
  5. 数据结构(Java)——查找和排序(1)
  6. postman 使用_Postman简单使用
  7. 漫画:8年估值千亿美金的字节跳动是如何修炼的
  8. byte集合是否相同_Go 语言设计哲学之十八:接口实现方法集合
  9. 淘客基地淘客小程序微信审核通过率90%以上的独家秘籍
  10. java 切图_分布式切图服务——切图篇
  11. CCF NOI1097 数列
  12. 需求与商业模式创新-4-战略
  13. 数模【数据的拟合方法-总结】【温度与电阻的关系模型、农业生产实验模型、血药浓度模型、化工氯气生产等级模型、人口预测模型】
  14. 【多线程】初识多线程
  15. UBOOT----基于itop4412开发板,从0开始,慢慢摸索UBOOT的启动流程和系统组织结构(一)
  16. Python学习笔记之 中英文文本情感分析
  17. AD常用使用快捷键和技巧
  18. 2-Arduino小车测速模板安装与测试
  19. 两种链表的实现以及例题思路分享
  20. python写txt方法_怎么实现python写入txt文件方法

热门文章

  1. 单片机 CH340下载 反向串联二极管
  2. 商业模式:收入、价值与过程
  3. 6道tomcat面试题,最后两道真不会
  4. 电子产品出口日本站PSE认证和METI备案需要哪些资料?
  5. selenium爬虫翻页、刷新+循环的深坑
  6. windows忘记管理员密码
  7. SpringBoot简明教程之项目属性配置(二):@ConfigurationProperties与@Value简单比较
  8. vue数组刷新_详解VUE 数组更新
  9. git 删除远程仓库本地分支和删除远程分支,保留本地分支或者删除本地
  10. MyBatisPlus联合主键批量更新