当前位置: 首页 > news >正文

多态

一、多态概述
image

【】多态,多种形态。

函数的重载就是一种多态。

对象也有多态。一个对象具备多种形态,new cat()既是cat也是animal。

【】形式体现上,父类创建的变量指向了子类对象。

图片

 

图片

 【】一个对象两种形态就是多态,左边动物右边猫两种形态

 

【】多态用在接口上,形式是:接口的变量指向接口的实现子类的对象

【】多态用在类上,形式是:父类的变量指向子类的对象

 
 二、多态的好处

 【】将内容封装变成对象,指挥对象做事情,这已经是将问题简单化。但是对象多了,又变复杂了。

能不能指挥更多对象做事情,所以找他们的共性发现,都属于动物。就只会动物做事情,下面的猫狗🐖都去做事情了。

 

图片

 

【】多态是方法的多态,不是属性的

【】既可以animal a=c;

也可以animal a=cat c;

还可以直接拿着c当a使用。

 

图片

 前面定义的animal,后面凡是继承animal的子类,都能被使用

图片

 
 三、多态的弊端
 

图片

 

要想使用后期功能就应该用其子类自己的变量去调用,父类变量只能调用子类继承重写的方法。

用指挥父类的方法调用子类的,父类有的才能指挥。

 【】多态的使用前提:继承重写(或实现重写)

图片

 

 
 四、多态中类型转换:自动向上提升限制子类特有功能、强制向下转换使用子类特有功能

  【】一旦向上类型提升,cat变为animal,就只能使用animal的功能,但指向对象是cat,那么就只能用对应的cat的功能了

【】向上转型限制子类特有功能

图片

 【】强制转换。将变量a类型从animal转为cat,

【】向下转型使用子类特有功能

图片

【】小猫,小猫可以转为动物,也可以转回来。但是无论怎么转变,它的对象到底是小猫。

【】转型不能把父类对象给转型或者把一种子类转型为另外一种。

只能子类自动提升为父类和转型成父类后再强制转换成子类。主角是子类。

image

【】举例:毕姥爷的两个方法都被毕老师继承:教学(但是被毕老师重写为教java)、钓鱼

毕老师实际有三个方法:教学java(重写父类方法)、钓鱼(继承父类)、看电影(自己的特有方法)

毕老师自动转换为毕姥爷类型后,只能使用毕姥爷声明过的方法。

想用自己的特有方法,需要强制转换为毕老师类型。

【】一会变为父类型,一会变回本类型。

image

image

 
 
五、需要强制转型前判断具体类型
【】具体类型判断:instanceof类似==

【】instance 例子,instanceof(类)的实例=类的对象

【】在强制转型时容易出现转型失败,所以转型之前通常都会加入这种逻辑判断,这样可以增加代码健壮性。

必须要加上判断。

image

【】a是animal类型的变量,需要判断传进来的具体是何种类型的时候,用instanceof来判断具体类型

【】instanceof只能判断引用型数据类型

 
 
 
 
 
 
 
 
 
 
http://www.rkmt.cn/news/1821.html

相关文章:

  • 数学分析 I note
  • 记录一下由于VS中qt的插件自动升级引发的编译问题
  • ck随笔
  • 终结“网络无助感”:Tenable CEO解析漏洞管理与安全心态
  • 生产搭建Hadoop
  • 生产搭建Rabbitmq
  • macOS Tahoe 26 RC (25A353) Boot ISO 原版可引导镜像下载
  • 企业如何选型低代码平台?4款产品测评
  • torch版本应该跟cuda、cudacnn的版本一致
  • 安装mysql数据库,从下载到配置的详细教程
  • [BJOI2018] 染色 题解
  • 金蝶云星空学习记录1
  • (简记)虚树
  • AI测试平台自动遍历:低代码也能玩转全链路测试
  • Cesium Shader内置变量 czm_*
  • IDA Pro 9.2 发布 - 强大的反汇编程序、反编译器和多功能调试器
  • Java 那些基础又关键的事儿
  • Codeforces Round 1047 (Div. 3)
  • 设计模式-策略
  • 数据库基本查询语句
  • 《Python数据结构与算法分析》代码
  • jmeter测试mysql
  • Docker容器
  • models中integer、char、Boolean、text、datetime字段类型的常用参数设置
  • PVE跨集群迁移虚机
  • 告别资料混乱!PJMan 让项目文件管理,简单到不用找
  • CRMEB标准版PHP订单列表功能解析与实战应用
  • vue3不允许缓存组件keep-alive直接包裹router-view
  • Python中的枚举类
  • Hall 定理相关