Java:什么是向上转型与向下转型(详细图解)

目录

一、什么是向上转型

1、概念

2、代码示例

3、向上转型的优缺点

二、什么是向下转型

1、向下转型的概念

​编辑

2、代码示例

三、向下转型的缺点及 instanceof 的使用

1、向下转型的缺点

2、instanceof的使用


一、什么是向上转型

1、概念

向上转型就是创建一个子类对象,将其当成父类对象来使用

语法格式:父类类型  对象名  =  new  子类类型()

                     Animal   animal  =  new Cat ();

Animal 是父类类型,但可以引用 Cat这个子类类型,因为是从小范围到大范围的转换。

2、代码示例

class Aminal {public void display() {System.out.println("Animal");}
}
class Cat extends Aminal {public void display() {System.out.println("Cat");}
}
class Dog extends Aminal {}public class Main{public static void main(String[] args) {Aminal aminal1 = new Aminal();Aminal aminal2 = new Cat();Aminal aminal3 = new Dog();aminal1.display();aminal2.display();aminal3.display();}
}

animal2中,Cat类 重写了 display方法,所以在实现时,打印的是Cat类中实现的内容。

animal3中,Dog类 没有重写 display方法,所以打印的还是父类中的内容。

由此我们可以得出:向上转型实现时

                                先看子类有没有

                                若是子类找不到

                                再看父类有没有

                                二者都无则报错!

3、向上转型的优缺点

优点:让代码实现更简单灵活

缺点:不能调用到子类特有的方法

例如:

class Animal {public void display() {System.out.println("Animal");}
}class Dog extends Animal {public void display() {System.out.println("dog");}public void eat() {System.out.println("吃骨头");}
}public class Main {public static void main(String[] args) {Animal animal = new Dog();animal.display();animal.eat(); //会报错}
}

所以,向上转型无法调用子类特有的方法!

二、什么是向下转型

1、向下转型的概念

将一个子类对象向上转型之后可以当成父类对象使用,若需要调用子类特有的方法,则需要将父类对象再还原为子类对象。这就称作向下转型。

2、代码示例

class Animal {public void display() {System.out.println("Animal");}
}class Dog extends Animal {public void display() {System.out.println("dog");}public void eat() {System.out.println("吃骨头");}
}public class Main{public static void main(String[] args) {//向上转型Animal animal = new Dog();animal.display();//向下转型//Animal类中原本没有 eat方法,在向下转型之前如果调用eat方法会报错//向下转型为子类Dog类后,就可以调用子类中特有的方法,而不会报错animal = (Dog)animal;((Dog) animal).eat();}
}

运行结果:

三、向下转型的缺点及 instanceof 的使用

1、向下转型的缺点

缺点:向下转型使用的比较少,而且不安全。如果转换失败,运行时就会抛异常。

2、instanceof的使用

Java中为了提高向下转型的安全性,引入了instanceof。如果表达式为 true,则可以安全转换。

使用实例:

class Animal {public void display() {System.out.println("Animal");}
}class Dog extends Animal {public void display() {System.out.println("dog");}public void eat() {System.out.println("吃骨头");}
}
public class Main {public static void main(String[] args) {//向上转型Animal animal = new Dog();//判断instanceof 是否为 trueif(animal instanceof Dog) {//向下转型animal = (Dog)animal;((Dog) animal).eat();} else {System.out.println("Animal无法向下转型为Dog");}}
}

 以上就是 Java:什么是向上转型与向下转型(详细图解)的全部内容了,希望能对您有所帮助!

您的点赞与收藏就是对我最大的支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/468339.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL进阶之路】通过实操理解 explain 执行计划

欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送! 在我后台回复 「资料」 可领取编程高频电子书! 在我后台回复「面试」可领取硬核面试笔记! 文章导读地址…

重复导航到当前位置引起的。Vue Router 提供了一种机制,阻止重复导航到相同的路由路径。

代码&#xff1a; <!-- 侧边栏 --><el-col :span"12" :style"{ width: 200px }"><el-menu default-active"first" class"el-menu-vertical-demo" select"handleMenuSelect"><el-menu-item index"…

Python算法题集_LRU 缓存

Python算法题集_LRU 缓存 题146&#xff1a;LRU 缓存1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【队列字典】2) 改进版一【有序字典】3) 改进版二【双向链表字典】 4. 最优算法 本文为Python算法题集之一的代码示例 题146&#xff1a;LRU …

Java面试、进阶、实践一网打尽(由电子工业出版社出版)

Java面试、进阶、实践一网打尽 准备好应对Java开发的新挑战吗&#xff1f;我们为您精选了五本核心书籍&#xff0c;一站式满足您在Java面试准备、技能进阶和实战应用的需求。 这套书籍包括《Offer来了&#xff1a;Java面试核心知识点精讲&#xff08;第2版&#xff09;》、《…

电脑数据误删如何恢复?9 个Windows 数据恢复方案

无论您是由于软件或硬件故障、网络犯罪还是意外删除而丢失数据&#xff0c;数据丢失都会带来压力和令人不快。 如今的企业通常将其重要数据存储在云或硬盘上。但在执行其中任何一项操作之前&#xff0c;您很有可能会丢失数据。 数据丢失的主要原因是意外删除&#xff0c;任何…

python算法之 Dijkstra 算法

文章目录 基本思想&#xff1a;步骤&#xff1a;复杂度&#xff1a;注意事项&#xff1a;代码实现K 站中转内最便宜的航班 Dijkstra 算法是一种用于解决单源最短路径问题的经典算法。该问题的目标是找到从图中的一个固定顶点&#xff08;称为源点&#xff09;到图中所有其他顶点…

“从根到叶:深入理解堆数据结构“

一.堆的概念及实现 1.1堆的概念 在数据结构中&#xff0c;堆是一种特殊的树形数据结构。堆可以分为最大堆和最小堆两种类型。 最大堆&#xff1a;对于堆中的任意节点&#xff0c;其父节点的值都不小于它的值。换句话说&#xff0c;最大堆中的根节点是堆中的最大值。并且&…

坚持刷题|重建二叉树

文章目录 题目考察点代码实现实现总结扩展问题从前序和中序遍历中序列构建二叉树题目代码实现与后序实现的异同点 前序和后序可不可以唯一确定一棵二叉树呢&#xff1f; Hello&#xff0c;大家好&#xff0c;我是阿月。坚持刷题&#xff0c;老年痴呆追不上我&#xff0c;今天刷…

2024年危险化学品生产单位安全生产管理人员证考试题库及危险化学品生产单位安全生产管理人员试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年危险化学品生产单位安全生产管理人员证考试题库及危险化学品生产单位安全生产管理人员试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&a…

Solidworks:剖切模型

剖切模型可以看清模型内部。今天设计了一个模型&#xff0c;试验一下如何剖切。 操作很方便&#xff0c;只需要点击一下零件模型上方的剖切按钮&#xff0c;立即就转入剖切视图。剖切后结果如下。 工程图纸中也可以展示剖面视图&#xff0c;操作方法是点击工程图工具页中的“…

Python教程57:海龟画图turtle画动态的流星雨,快让你女朋友看看

---------------turtle源码集合--------------- Python教程91&#xff1a;关于海龟画图&#xff0c;Turtle模块需要学习的知识点 Python教程51&#xff1a;海龟画图turtle画&#xff08;三角形、正方形、五边形、六边形、圆、同心圆、边切圆&#xff0c;五角星&#xff0c;椭…

论文阅读:GamutMLP A Lightweight MLP for Color Loss Recovery

这篇文章是关于色彩恢复的一项工作&#xff0c;发表在 CVPR2023&#xff0c;其中之一的作者是 Michael S. Brown&#xff0c;这个老师是加拿大 York 大学的&#xff0c;也是 ISP 领域的大牛&#xff0c;现在好像也在三星研究院担任兼职&#xff0c;这个老师做了很多这种类似的工…