Java 中的上转型和下转型
在我们的日常中,上转型和下转型都使用的比较少,所以当别人问起来什么是上转型,什么是下转型,自己往往一片模糊,或者不能将他们进行明显的区分。
在这里,我将以我个人理解来论述上下转型,希望对大家有帮助,如有不足,请指出,我会将此及时纠正。
首先概念:
- 向上转型
是指将基类(也叫父类)引用转换为导出类(也叫子类)引用的动作
问题
在向上转型的过程中,我们容易出现方法丢失的问题,比如我们将一个导出类(子类)进行向上转型,但是在基类(父类)中可能缺少部分导出类(子类)的方法,所以我们对导出类(子类)进行向上转型之后,使用基类(父类)对象去调用方法,只能调用基类(父类)有的方法。
- 向下转型
这个就和向上转型相对应,但是有一点,向下转型必须是在已经向上转型的基础上进行
计算
在这里,如何理解向下转型呢?它就如同一个数学问题,我将用短代码呈现:
//假设A为基类,也就是父类,B为导出类,也就是子类
A a;
a=new B();//这是进行上转型
B b=(B)a;//这是进行下转型
在这里面就相当于对a加了两个负号,然后负负得正,所以最后进行下转型后,对象b能够调用B类的所有方法,类似于"B b=new B()"。
在最后,我们上转型也好,下转型也罢,其实实际输出都是输出导出类(子类)的内容,不同的是,调用的对象不同,还有就是上转型的对象对造成方法丢失的情况。
以下是测试代码:
class Animal{public void show(){System.out.println("这是基类,也叫子类!");}public void walk(){System.out.println("走或飞");}
}
class Dog extends Animal{public void show(){System.out.println("这是导出类,也叫子类!");}public void walk(){System.out.println("四只脚走!");}public void smile(){System.out.println("dog smile!");}
}public class Test {private static Object Dog;public static void main(String[] args){Animal animal=new Animal();Dog dog=new Dog();animal.show();dog.show();animal.walk();dog.walk();dog.smile();//这是将animal进行上转型animal=new Dog();//调用时写的虽然是基类(父类)方法,但是输出的是导出类(子类)重写后的值//对于我个人方便理解,我将它记为用基类(父类)调用导出类(子类)的方法animal.show();animal.walk();//((Dog) animal).smile();//下面进行下转型,下转型只能对经过上转型的对象进行下转型Dog dog_0=(Dog)animal;dog_0.walk();dog_0.show();dog_0.smile();}
}
输出结果如下所示:
这是基类,也叫子类!
这是导出类,也叫子类!
走或飞
四只脚走!
dog smile!
这是导出类,也叫子类!
四只脚走!
四只脚走!
这是导出类,也叫子类!
dog smile!
其类图如下所示:
在测试过程中,我为了大家观看方便,将所有类写在一起,但是在实际生活中,最好是每个类分开写,这样也方便自己的一个了解与维护。
Java 中的上转型和下转型相关推荐
- Java多态中的 向上转型/向下转型
Java 向上转型和向下转型的详解 转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求,则子类可以重写父类中的方法 ...
- Java从入门到放弃09---多态/向上转型/向下转型/多态内存图/抽象类/关键字abstract不能和哪些关键字共存/接口/类与类,类与接口,接口与接口的关系/抽象类与接口的区别
Java从入门到放弃09-多态/向上转型/向下转型/多态内存图/抽象类/关键字abstract不能和哪些关键字共存/接口/类与类,类与接口,接口与接口的关系/抽象类与接口的区别 01 多态 多态指的是 ...
- Java中FTPClient上传中文目录、中文文件名乱码问题解决方法
Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 参考文章: (1)Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 (2)https://www.cnblog ...
- Java中如何读取文件夹下的所有文件
问题:Java中如何读取文件夹下的所有文件 Java里面是如何读取一个文件夹下的所有文件的? 回答一 public void listFilesForFolder(final File folder) ...
- java中为什么使用上转型和下转型
为什么使用上转型?因为当一个父类有很多子类,子类都重写了父类的方法并加以使用.这时候,如果要在之前代码让你用其他子类来实现,就变得很简单,只需要把A a = new B();换成A a = new C ...
- java上转型与下转型,Java -- 上转型和下转型
首先理解一句话:父类引用指向子类对象:什么意思呢? 记得在刚开始学习面向对象编程时候,经常听老师讲:如果要使用一个类中的成员,就需要先实例化对象,就是说要先创建一个引用类型的对象,就可以使用里边的内容 ...
- java 上转型对象_Java上转型和下转型对象
版权声明:转载原创文章请以超链接形式请注明原文章出处,尊重作者,尊重原创! 恰饭广告 上转型对象:子类创建对象 并将这个对象引用赋值给父类的对象. 语法格式:Father f=new Son(); 注 ...
- JAVA中多态以及向上转型向下转型、重写的讲解
重写 重写(override):也称为覆盖.重写是子类对父类非静态.非private修饰,非final修饰,非构造方法等的实现过程 进行重新编写, 注意!!!返回值和形参都不能改变. 重写的好处在于子 ...
- Java接口,多态,向上转型,向下转型的意义
接口 官方解释: Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现 ,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 包含 ...
最新文章
- Mac下添加Hibernate时报错Unsupported major.minor version
- uniapp中自定义返回和物理返回
- SQL Server中一个隐性的IO性能杀手-Forwarded record
- python numpy.linspace() 使用介绍
- LeetCode -- 204. Count Primes
- 小博老师解析Java核心技术 ——JSwing绘图技术
- PL/SQL经典练习
- 双11特刊|一站式在线数据管理平台DMS技术再升级,高效护航双11
- (第十二章)创建数据表索引
- 从孙子算经到中国剩余定理
- Bitmap存储入门
- ubuntu vmplayer安装vmtool
- c语言助手,C语言代码实例助手
- 系统测试包含哪几部分?
- 等额本息计算公式推导
- Axure 9软件功能区域、界面介绍
- vs商业智能项目的安装
- Eureka报错“EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ”
- 物联网方面的竞赛有那些?
- bzoj 4246: 两个人的星座 计算几何
热门文章
- 京东抢购茅台如何获取_JdTdudfp
- java mediator模式_Java Mediator Pattern(中介者模式)
- 对于软构课程oop一课的课堂笔记
- iis 设置了主机名 就不能访问
- 【彩彩只能变身队】用户需求分析(二)—— 调查结果
- 支付宝/飞行模式解决/已停止访问该网页
- MSF基础--info/show targets
- 【生活】小绿电车,慢着点儿
- 珍惜身边的亲人、朋友
- 解决Element type “http:“ must be followed by either attribute specifications, “>“ or “/>“.