当前位置:网站首页>CSDN21天学习挑战赛——多态(05)
CSDN21天学习挑战赛——多态(05)
2022-08-10 09:26:00 【二哈喇子!】
活动地址:CSDN21天学习挑战赛
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:
想系统/深入学习某技术知识点…
一个人摸索学习很难坚持,想组团高效学习…
想写博客但无从下手,急需写作干货注入能量…
热爱写作,愿意让自己成为更好的人…
…
什么是多态?
指对象可以有多种形态。
多态的常见形式
父类类型 对象名称 = new 子类构造器
多态中成员访问特点
方法调用:编译看左边,运行看右边。
变量调用:编译看左边,运行也看左边。(注意)
多态的前提
有继承/实现关系;有父类引用指向子类对象;有方法重写(多态侧重行为多态)。
优势
在多态形式下,右边对象可以实现解耦合,便于扩展和维护。
Animal a = new Dog();
a.run(); // 后续业务行为随对象而变,后续代码无需修改
定义方法的时候,使用父类型作为参数,该方法就可以接收这父类的一切子类对象,体现出多态的扩展性与便利。
多态下会产生的一个问题:
多态下不能使用子类的独有功能
自动类型转换(从子到父):
Animal c = new Cat();
强制类型转换(从父到子)
从父到子( 必须进行强制类型转换,否则报错): 子类 对象变量 = (子类)父类类型的变量
作用:可以解决多态下的劣势,可以实现调用子类独有的功能。
注意: 有继承/实现关系的类就可以在编译阶段进行强制类型转换;但是,如果转型后的类型和对象真实对象的类型不是同一种类型,那么在运行代码时,就会出现ClassCastException
Animal c = new Cat();
Dog d = (Dog)c; // 出现异常 ClassCastException
Java建议强转转换前使用instanceof判断当前对象的真实类型,再进行强制转换
变量名 instanceof 真实类型
判断关键字左边的变量指向的对象的真实类型,是否是右边的类型或者是其子类类型,是则返回true,反之。
总结
1、引用数据类型的类型转换,有几种方式?
自动类型转换、强制类型转换。
2、强制类型转换能解决什么问题?
可以转换成真正的子类类型,从而调用子类独有功能。
3、强制类型转换需要注意什么?
有继承关系/实现的2个类型就可以进行强制转换,编译无问题。
运行时,如果发现强制转换后的类型不是对象真实类型则报错(ClassCastException)
4、强制类型转换前最好做什么事情,如何进行?
使用instanceof判断当前对象的真实类型,再进行强制转换
对象变量名 instanceof 真实类型
边栏推荐
- 1499. 满足不等式的最大值 堆/双端队列
- 10 【异步组件 组合式函数(hooks)】
- 郭晶晶家的象棋私教,好家伙是个机器人
- J9 digital science: Web 3.0 is about data ownership or decentralized?
- Defending risks with technology and escorting cloud native | Tongchuang Yongyi X Boyun held a joint product launch conference
- 04 【计算属性 侦听器】
- 【OAuth2】十九、OpenID Connect 动态客户端注册
- 浅析JWT安全问题
- 【OAuth2】二十、OAuth2扩展协议 PKCE
- 12 【其它组合式API】
猜你喜欢

J9数字论:关于DAO 特点的宏观分析

UE4 粒子特效基础学习 (01-将粒子效果挂载到角色身上)

【OAuth2】二十、OAuth2扩展协议 PKCE

mySQL add, delete, modify and check advanced

PostgreSQL 2022 发展现状:13 个非 psql 工具

00后女孩月薪3200,3年买两套房,这个程序员变现新风口千万要把握住

jq封装树形下拉选择框组件

The first offline workshop in 2022!Data application experience day for application developers is coming | TiDB Workshop Day

shell iterates over folders and outputs
![How to use [jmeter regular expression extractor] to solve the problem of returning the value as a parameter](/img/bf/2367304d5bdf520e369097a49a7bb6.png)
How to use [jmeter regular expression extractor] to solve the problem of returning the value as a parameter
随机推荐
将博客搬至CSDN
设计分享|基于单片机的从左到右流水灯
用高质量图像标注数据加速AI商业化落地
故障分析 | Sql_slave_skip_counter 使用不规范对复制的影响
【OAuth2】十九、OpenID Connect 动态客户端注册
MySQL的用户临时表与内部临时表
并查集学习
How to break the DeepFake face-changing scam?turn him over
"Guangzhou highway engineering measures for the supervision and administration of production safety, and revised from six aspects
Nvidia's gaming graphics card revenue plummets / Google data center explosion injures 3 people / iPhone battery percentage returns... More news today is here...
【Enterprise Architecture】Agile and Enterprise Architecture: Strategic Alliance
微信小程序--》小程序生命周期和WXS使用
J9 Digital Theory: What kind of sparks will Web3.0+ Internet e-commerce cause?
MUDA:对齐特定域的分布和分类器以实现来自多源域的跨域分类
JWT:拥有我,即拥有权力
PTA 习题2.1 简单计算器
js读取excel时间格式转换
【元宇宙欧米说】听兔迷兔如何从虚拟到现实创造潮玩新时代
UE4 粒子特效基础学习 (01-将粒子效果挂载到角色身上)
【API架构】REST API 行业辩论:OData vs GraphQL vs ORDS