多态的转型和案例--java进阶day02

news/2025/2/26 10:55:46/文章来源:https://www.cnblogs.com/zhishi6/p/18737993

1.多态的转型

1.向上转型

我们之前学的多态创建对象,使用的都是向上转型,父类引用指向子类(赋值方式则是从子到父),f拿到子类的地址,就能访问子类的堆内存

2.向下转型

和向上转型相反,子类引用指向父类(赋值是从父到子),f现在记录着地址,这时再将其地址转交给子类对象,如下图,黑线的指向就像Zi z=new Zi(),这不就相当于创建子类对象,那想用什么成员,就可以用了

需要注意的点是,向下转型需要强制转换,因为父类比子类大(父亲肯定比儿子更猛)

2.多态的转型问题

了解了多态的转型后,我们就可以解决上次的问题了,现在国外类里有一个自己的方法check(),使用多态创建对象,编译发现接口中不存在该方法,所以编译报错

这时我们使用向下转型,将接口拿到的权限再转交给国外类,再用重新获得权限的实现类调用自己的方法即可

虽然解决了问题,但我们的代码目前存在安全隐患,如下图,当我们输入1,接口指向国内类时

这个问题叫做类型转换异常

在引用数据类型的强转中(和基本数据类型无关),接口指向国内类对象,然后又使用了向下转型,接口又被转交给了国外类,实际类型是国内类,目标类型又是国外类,所以造成了错误

说白点就是只能接口和对应的实现类进行转型,不能乱转

3.instanceof关键字

对于类型转换异常的解决方法,就是通过instanceof关键字来解决

我们只需要使用if来进行小的判断,看看接口对象是不是国外类型,是,就进行向下转型,不是则无需进行向下转型,也就不会出现刚才的问题

4.案例

思路:不管是什么支付方法,肯定会有支付,所以我们先写一个接口用于支付,再对应三种支付方式写三种类,然后将这些类实现接口,最后用多态和switch分别指向不同的实现类,调用其方法即可

准备好接口和实现类




进行业务



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

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

相关文章

2P4M-ASEMI照明控制专用2P4M

2P4M-ASEMI照明控制专用2P4M编辑:ll 2P4M外观与基本结构 2P4M 可控硅通常封装在一个小巧的塑料外壳内,从外观上看,它有着几个标志性的引脚。一般为三脚结构,每个引脚都肩负着不同的使命。其内部结构精密复杂,核心是由多层半导体材料交替堆叠而成,这些半导体层经过精心设计…

Task VS ValueTask

在 C# 中,异步编程是构建响应式应用程序的基础。Task 是表示异步操作的首选类型。但是,在某些高性能场景中,与 Task 相关的开销可能会达到一个瓶颈。ValueTask 是 .NET Core 2.1 中引入的结构。与引用类型的 Task 不同,ValueTask 是一种值类型,这使得它在某些情况下效率更…

EtherNet/IP转Modbus看网关模块驱动罗克韦尔PLC与上位机协议转换全过程

在工业自动化控制系统中,常常会遇到不同品牌和通信协议的设备需要协同工作的情况。本案例中,客户现场采用了 AB PLC,但需要控制的变频器仅支持 Modbus 协议。为了实现 AB PLC 对变频器的有效控制与监控,引入了捷米特 JM-EIP-RTU 网关模块来完成 EtherNet/IP 与 Modbus 之间…

Joker 可视化开发平台全局方法使用指南

在 Joker 可视化开发平台中,全局方法是实现公共业务逻辑的有力工具,它能跨越组件和页面文件的界限,让开发者快速调用,显著提升开发效率。下面将详细介绍全局方法在平台中的使用方式。 一、全局方法的定义与功能全局方法是用于封装通用业务逻辑的特殊函数,在整个项目中都可…

Excel数据快速入库

我们在日常的开发过程中,经常会需要将业务端的Excel数据,导入到数据库。 可以用一个简单的方式:插入的SQL语句:INSERT INTO students (id, name, age) VALUES (2, Jane Smith, 22), (3, Emily Jones, 21), (4, Michael Brown, 23);然后整理Excel: 这里需要将【双引号】替…

没有源码,如何修改代码逻辑?

拍摄于西安德福巷前段时间接手了一个二次开发其他团队代码的项目,过程中发生了不少有意思的小插曲。今天正好有点空闲时间,就简单梳理一下,希望能给大家提供一些参考和帮助。当我咨询对方团队:“大哥,我们这边要对你们在xxx项目上的代码进行二次开发,想了解下你们的二开机…

deepseek本地部署硬件资源对比表.250226

‌DeepSeek在不同版本下的硬件资源需求对比表如下‌:版本 CPU核心数 GPU显存(GB) GPU类型 内存(GB) 存储需求(TB) 网络带宽(Mbps)1.5B 1-2 4 普通消费级(如RTX 3090/4090) 8-16 1 50-1007B 1-2 4 普通消费级(如RTX 3090/4090) 8-16 1 50-1008B 1-2 4 普通消费级(…

deepseek本地部署硬件资源对比表。250226

‌DeepSeek在不同版本下的硬件资源需求对比表如下‌:版本 CPU核心数 GPU显存(GB) GPU类型 内存(GB) 存储需求(TB) 网络带宽(Mbps)1.5B 1-2 4 普通消费级(如RTX 3090/4090) 8-16 1 50-1007B 1-2 4 普通消费级(如RTX 3090/4090) 8-16 1 50-1008B 1-2 4 普通消费级(…

用python画一个五星红旗

import turtle 设置画布和画笔 screen = turtle.Screen() 设置画布大小 screen.setup(800, 600) 设置画布背景颜色为红色,模拟五星红旗旗面颜色 screen.bgcolor("red") pen = turtle.Turtle() 设置画笔最快速度 pen.speed(0) 隐藏画笔箭头 pen.hideturtle() 定义绘制…

爬取东方财富网-parsel教学篇(正则表达式的详细使用+实例)

@目录前言导航正则表达式介绍正则表达式基本语法re库的使用常用函数案例源码运行截图共勉博客 前言 本文原本是想通过分享一个爬取东方财富网案例,来介绍parsel解析库的使用,没想到硬生生的写成了正则表达式的详细使用,想学习正则表达式的的小伙伴们可以来看下。 导航爬取小…

如何通过网管系统提升运维效率?

网络系统在企业信息化系统扮演着越来越重要的作用,网络规模不断扩大,网络结构越来越复杂,传统的运维方式已经难以满足高效、稳定运行的要求。网管系统作为IT运维的重要工具,能够帮助企业实现网络的智能化管理,显著提升运维效率。本文将探讨网管系统与IT运维的关系,并结合…

保证接口幂等性的这 7 种方案,绝了!

前言 接口幂等性问题,对于开发人员来说,是一个跟语言无关的公共问题。本文分享了一些解决这类问题非常实用的办法,绝大部分内容我在项目中实践过的,给有需要的小伙伴一个参考。 不知道你有没有遇到过这些场景:我们在填写某些form表单时,保存按钮不小心快速点了两次,表中…