向下转型(通俗易懂)
向下转型
与向上转型相对应的就是向下转型了。向下转型是把父类对象转为子类对象。(请注意!这里是有坑的。)
案例驱动
先看一个例子:
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
向下转型(通俗易懂)相关推荐
- java 泛型向下转型_Java向上转型和向下转型(附具体样例)
Java向上转型和向下转型(附具体样例) 熬夜整理的关于Java向上和向下转型的样例,很的通俗易懂哦~~~~ 一.向上转型 package com.sheepmu; class Animal { pu ...
- 【Java挠头】继承、抽象、接口、多态、向上转型、向下转型等精妙干货
–本文摘要– 1.本文的目标读者:是了解Java基础,且对面向对象概念有所了解,但是对Java中继承.抽象类.接口.多态等等概念搞不清的初学者. 2.本文的内容摘要:讲述Java中的一 ...
- Object类 任何类都是object类的子类 用object对象接收数组 object类的向上向下转型...
任何类都是object类的子类 用object对象接收数组 object类的向上向下转型 转载于:https://www.cnblogs.com/qingyundian/p/7744351.html
- JavaWeb学习笔记①——Java向下转型在JavaEE中运用——登陆验证
在学习JavaEE的过程中慢慢了解到Java中编程思想的优秀设计,以下将是一个多态-向下转型的示例,该实例是在Servlet-过滤器中的登陆验证的示例,代码中运用向下转型解决问题 import jav ...
- java多态上转下_(转)java的多态(向上转型、向下转型)
在我的明白:java的向上和向下转型可以看成是类型的转换. ---------------- 版权声明:本文为CSDN博主「ldsh304」的原创文章,遵照CC 4.0 BY-SA版权协议,转载请附上 ...
- 重新精读《Java 编程思想》系列之向上转型与向下转型
前言 今天重读了一下向上转型与向下转型,有些新的体会,了解了向上转型的好处,及如何向下转型.在此分享给大家. 向上转型 向上转型是用来表现新类和基类之间的关系.在传统中,由导出类转型成基类,在继承图中 ...
- Java 转型问题(向上转型和向下转型)
Java 转型问题其实并不复杂,只要记住一句话:父类引用指向子类对象. 什么叫父类引用指向子类对象? 从 2 个名词开始说起:向上转型(upcasting) .向下转型(downcasting). 举 ...
- 多态Poly中的向上/下转型 Upcast/Downcast
[参考资料]马克-to-win java中多态polymorphism,向上转型和动态方法调度有什么用? java中什么叫多态,动态方法调度(dynamic method dispatch)? jav ...
- Java转型(向上或向下转型)
在Java编程中经常碰到类型转换,对象类型转换主要包括向上转型和向下转型. 5.13.1 向上转型 我们在现实中常常这样说:这个人会唱歌.在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就 ...
最新文章
- eix安装_Windwos U盘PE制作与系统安装
- 当编程语言掌握在企业手中,是生机还是危机?
- jzoj4739-[雅礼联考GDOI2017模拟9.2]Ztxz16学图论【LCT,树状数组】
- js IE和Firefox下event处理
- 数据结构(Java)——查找和排序(1)
- postman 使用_Postman简单使用
- 漫画:8年估值千亿美金的字节跳动是如何修炼的
- byte集合是否相同_Go 语言设计哲学之十八:接口实现方法集合
- 淘客基地淘客小程序微信审核通过率90%以上的独家秘籍
- java 切图_分布式切图服务——切图篇
- CCF NOI1097 数列
- 需求与商业模式创新-4-战略
- 数模【数据的拟合方法-总结】【温度与电阻的关系模型、农业生产实验模型、血药浓度模型、化工氯气生产等级模型、人口预测模型】
- 【多线程】初识多线程
- UBOOT----基于itop4412开发板,从0开始,慢慢摸索UBOOT的启动流程和系统组织结构(一)
- Python学习笔记之 中英文文本情感分析
- AD常用使用快捷键和技巧
- 2-Arduino小车测速模板安装与测试
- 两种链表的实现以及例题思路分享
- python写txt方法_怎么实现python写入txt文件方法