JAVA中的向上转型和向下转型
一、向上转型和向下转型
向上转型和向下转型是在JAVA继承操作中用到的东西,在讲到转型之前我们需要认识到继承过程中的对象类型转换,这种转换有两个特点:
1.这是继承过程中发生的操作
2.新类是现有类的一种类型。这种说法主要是因为现有类的方法必定存在于新类中,所以通过现有类发送的信息(就是通过创建一个对象进行操作)可以直接通过新类发送。
二、向上转型
向上转型:创建一个基类的引用,但是在创建对象的时候是用的导出类的。示意图如下:
由图可知:由导出类转型成基类,在继承图上是向上移动的。同时由于是从较专用类型向较通用类型转换,所以是安全的,因为专用类型肯定包含通用类型。
特点:
1.把导出类对象直接赋给基类类引用,不用强制转换
2.引用可以直接使用基类中的方法,但是不能使用导出类的方法
3.从导出类向上转型,永远不需要知道正在处理的对象的确切类型
4.在向上转型过程中可能发生类接口中方法丢失
示例 :
class Fupcasting{public Fupcasting(String ident) {System.out.println("i am " + ident);}public void count() {}
}
public class Upcasting extends Fupcasting{public Upcasting(String ident) {super(ident);// TODO Auto-generated constructor stub}public void add() {}public static void main(String[] args) {String name = "fatherupcasting";// TODO Auto-generated method stubFupcasting fupcasting = new Upcasting(name); //向上转型fupcasting.count();//fupcasting.add(); //使用导出类的方法报错}}
三、向下转型
向下转型可以参照向上转型,二者正好相反。这里使用向下转型的原因是因为上述的向上转型的第三条的关系:从导出类向上转型,永远不需要知道正在处理的对象的确切类型!
解释如下:
可知:导出类可以完全代替基类,在使用它们的时候,完全不需要知道关于子类的任何信息。
这里如果你清楚 引用和对象 的概念,你就会明白,当我们在向上转型的时候,你处理的导出类的对象你完全不清楚确切类型,这里的类型可以是 基类,也可以是导出类,也就是这一步:
Fupcasting fupcasting = new Upcasting(name);
你也可以写成这样:
Fupcasting fupcasting = (Fupcasting)new Upcasting(name);
或者这样:
Fupcasting fupcasting = (Upcasting)new Upcasting(name);
这里的 (Upcasting) 和 (Fupcasting) 都声明了我们创建的对象的类型,但是在向上转型的过程中我们是这样做的:
Fupcasting fupcasting = new Upcasting(name);
通过上面的步骤我们知道我们并不清楚这个对象是什么类型的,所以如果在一定的情况下要获取类型信息,就会用到向下转型!
向下转型示意图:
借用上面的shape图,如果现在我们知道有一个几何图形,但是我们不清楚它是圆、正方形等,但是它的形状肯定是唯一确定的。
实例:
class Fupcasting{public Fupcasting(String ident) {System.out.println("i am " + ident);}public void count() {}
}
public class Upcasting extends Fupcasting{public Upcasting(String ident) {super(ident);// TODO Auto-generated constructor stub}public void add() {}public static void main(String[] args) {String name = "fatherupcasting";// TODO Auto-generated method stub// Fupcasting fupcasting = (Upcasting)new Upcasting(name); //向上转型// fupcasting.count();//fupcasting.add(); //使用导出类的方法报错Upcasting upcasting = (Upcasting) new Fupcasting(name); //向下转型upcasting.add();}}
特点:
1.向下转型可以调用子类类型中所有的成员
2.父类引用对象指向的是子类对象,那么在向下转型的过程中是安全的,就是编译是不会出错误。但是如果父类引用对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错,但是运行时会 出现 Java 强制类型转换异常
如果觉得对你有帮助,点个赞再走吧!
JAVA中的向上转型和向下转型相关推荐
- Java中的向上转型及向下转型
我们都知道Java的三大特性:封装.继承.多态. Java中的向上转型及向下转型体现了Java中的继承性及多态性,所谓继承,不难理解,存在于子父类间,子类继承父类中不被私有化的属性和方法.而多态性,顾 ...
- java中向上转型和向下转型浅析
基础概念 向上转型就是子类对象被父类引用,例如动物和小鸟的关系,小鸟属于动物,动物不仅仅只包含小鸟,还包含猫和狗等,例如: Animal birdAnimal = new Bird();这种方式就是 ...
- 【Java挠头】继承、抽象、接口、多态、向上转型、向下转型等精妙干货
–本文摘要– 1.本文的目标读者:是了解Java基础,且对面向对象概念有所了解,但是对Java中继承.抽象类.接口.多态等等概念搞不清的初学者. 2.本文的内容摘要:讲述Java中的一 ...
- 重新精读《Java 编程思想》系列之向上转型与向下转型
前言 今天重读了一下向上转型与向下转型,有些新的体会,了解了向上转型的好处,及如何向下转型.在此分享给大家. 向上转型 向上转型是用来表现新类和基类之间的关系.在传统中,由导出类转型成基类,在继承图中 ...
- 第三次学JAVA再学不好就吃翔(part35)--多态向上转型和向下转型
学习笔记,仅供参考 文章目录 面向对象 多态 多态向上转型和向下转型 多态的好处和弊端 面向对象 多态 多态向上转型和向下转型 我们首先通过以下代码复习一下自动类型提升和强制类型转换: class B ...
- Java转型(向上转型和向下转型)
在Java编程中经常碰到类型转换,对象类型转换主要包括向上转型和向下转型. 5.13.1 向上转型 我们在现实中常常这样说:这个人会唱歌.在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就 ...
- [JAVA]向上转型与向下转型
要理解多态性,首先要知道什么是"向上转型"."向下转型". 对象的多态性:父子类对象的转换 **向上转型:**子类对象变为父类对象,语法: 父类 父类对象 = ...
- java 对象向上转型_JAVA对象向上转型和向下转型
今天做了一个测试的题目,发现自己还是很多问题没有静下心来做.很多问题是可以自己解决的但是自己一是没有读清题意,二是自己心里太急躁了.所以这个要自己应以为鉴! 对象的转型问题其实并不复杂,我们记住一句话 ...
- java 向下转型运行时错误_Java向上转型和向下转型
首先定义父类Animal,所有动物都有一个吃东西的方法:子类Dog还增加了一个叫的功能. public classAnimal {public voideat() { System.out.print ...
最新文章
- 【爱上Java8】BigInteger在Java8中的改进
- 她琴棋书画全能,还进入清华计算机系实验室,被赞智商太超群、能力过强悍...
- Python标准库04 文件管理 (部分os包,shutil包)
- 3d数学基础学习总结
- FANUC常用CNC诊断数据表
- LintCode-落单的数 III
- 关于烂代码的那些事——什么是好代码
- linux进程通讯-纯文本文件
- win10安装opcenum_Win10提示Windows无法安装到GPT分区形式磁盘
- 29 Python - 字符与编码
- B1295 [SCOI2009]最长距离 最短路
- java取set中的元素个数_java中的Set的使用以及各种遍历方法(较为全面)
- [转] Java之ACM速成
- [高级操作系统课程] 各大名校 ppt,pdf 课件整理(course materials)
- 电脑出现未识别的网络,无Internet访问怎么办
- 爬取初试----猫眼电影,猫眼评分
- python模块化导入
- c语言编程运动会分数统计系统,东华大学数据结构设计C语言运动会分数统计系统...
- 安装Ubuntu 20.04后要做的几件事(换源,精简,定制)
- 最好的降噪蓝牙耳机有哪些?目前最好的降噪蓝牙耳机推荐