多态.Java
(1)什么是多态?
- 同类型的对象,表现出不同的形态。前者指父类,后者指不同的子类
说简单点,就是父类的同一种方法,可以在不同子类中表现出不同的状态,或者说在不同子类中可以实现不同的效果(重写)。
(2)多态的前提
- 有继承/实现关系------有了继承才有子父类之分
- 有父类引用指向子类对象------,如:Animal a = new Dog(); ——小到大,向上转型。这里父类引用指向子类对象,其实相当于把子类对象当父类对象来用,所以这是一种向上转型的引用。
- 有方法重写------在不同的子类中重写父类方法,实现自己不同的功能。当然也可以不重写,主要是重写这个功能使得每个子类都独具一格,不会全都相同,这是多态重要的一点。
(3)多类的好处
- 方法使用父类类型作为形参,就可以接收所以子类对象,体现多态的扩展性与便利
(4)多态的表现形式
- 父类类型 对象名称=new 子类类型();
Fu a=new Zi();
(5)调用的特点
- 成员变量:编译看左边,运行也看左边
- 成员方法:编译看左边,运行看右边(子类如果进行方法重写的话,父类里的方法就被覆盖)
(6) 多态弊端是什么?
- 不能调用子类特有功能,因为编译看左边,特有功能表示父类没有,代码直接报错
(7)引用数据类型的转换有几种方式?
- 自动类型转换
- 强制类型转换(可解决弊端)
//自动类型转换
Person p=new Student;//小(Student)--->大(Person)
//强制类型转换
Student s=(Student)p;//大(Person)--->小(Student)
(8)强制类型转换能解决什么问题?
- 可以把对象转换成真正的子类类型,从而调用子类的特有功能
- 转换类型与真实对象类型不一致会报错
- 转换的时候用instanceof关键字进行判断它属于哪个子类
(9)综合练习
- 根据需求完成代码
父类Animal
package duotai;public class Animal {private String color;private int age;public Animal() {}public Animal(String color, int age) {this.color = color;this.age = age;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public void eat(String something){System.out.println("动物在吃"+something);}
}
子类Dog
package duotai;public class Dog extends Animal{public Dog() {}public Dog(String color, int age) {super(color, age);}@Overridepublic void eat(String something) {System.out.println("此时此刻"+getAge()+"岁"+getColor()+"颜色的狗抱着"+something+"猛吃");}public void lookHome(){System.out.println("狗在看家");}}
子类Cat
package duotai;public class Cat extends Animal{public Cat() {}public Cat(String color, int age) {super(color, age);}@Overridepublic void eat(String something) {System.out.println("此时此刻"+getAge()+"岁"+getColor()+"颜色的猫眯着眼吃"+something);}public void catchMouse(){System.out.println("猫抓老鼠");}
}
Person类
package duotai;public class Person {private String name;private int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}/*public void keepDog(Dog dog,String someting){System.out.println(this.age+"的"+this.name+"养了一条"+dog.getColor()+"的"+dog.getAge()+"岁的狗");dog.eat(someting);}public void keepCat(Cat cat,String someting){System.out.println(this.age+"岁的"+this.name+"养了一条"+cat.getColor()+"的"+cat.getAge()+"的小猫");cat.eat(someting);}//一个一个构造饲养动物的方法,过于繁琐*///构造一个方法,能够接收所有的动物//方法的形参:可以写这些类的父类,就可以接收所以子类对象(多态)public void keepPet(Animal a,String something){//if条件语句判断它属于哪一个子类,进行强转,就可以使用子类特有的方法if(a instanceof Dog ){Dog d=(Dog)a; //Animal强转成DogSystem.out.println(this.age+"的"+this.name+"养了一条"+a.getColor()+"的"+a.getAge()+"岁的狗");a.eat(something);d.lookHome();} else if (a instanceof Cat ) {Cat c=(Cat)a; //Animal强转成CatSystem.out.println(this.age+"的"+this.name+"养了一条"+a.getColor()+"的"+a.getAge()+"岁的小猫咪");a.eat(something);c.catchMouse();}else {System.out.println("没有这种动物");}}
}
测试类
package duotai;public class Test {public static void main(String[] args) {/*Person p1=new Person("西施",15);Dog d=new Dog("粉红",2);p1.keepDog(d,"美味的鸡叉骨");//选中+shift+F6:批量修改Person p2=new Person("花木兰",16);Cat c=new Cat("淡黄",4);p2.keepCat(c,"美味的小鱼干");*/Person p1=new Person("西施",15);Dog d=new Dog("粉红",2);p1.keepPet(d,"美味的鸡叉骨");Person p2=new Person("花木兰",16);Cat c=new Cat("淡黄",3);p2.keepPet(c,"美味的小鱼干");}
}
结果
注意:
相关文章:
多态.Java
(1)什么是多态? 同类型的对象,表现出不同的形态。前者指父类,后者指不同的子类 说简单点,就是父类的同一种方法,可以在不同子类中表现出不同的状态,或者说在不同子类中可以实现不同…...
SSL根证书是什么
根证书是什么? 根证书是CA认证中心给自己颁发的证书,是信任链的起始点。安装根证书意味着对这个CA认证中心的信任。 从技术上讲,证书其实包含三部分,用户的信息,用户的公钥,还有CA中心对该证书里面的信息的签名&#…...
大模型量化技术-GPTQ
大模型量化技术-GPTQ 2022年,Frantar等人发表了论文 GPTQ:Accurate Post-Training Quantization for Generative Pre-trained Transformers。 这篇论文详细介绍了一种训练后量化算法,适用于所有通用的预训练 Transformer模型,同时只有微小的性能下降。 GPTQ算法需要通过…...
NzN的数据结构--实现双向链表
上一章中,我们学习了链表中的单链表,那今天我们来学习另一种比较常见的链表--双向链表!! 目录 一、双向链表的结构 二、 双向链表的实现 1. 双向链表的初始化和销毁 2. 双向链表的打印 3. 双向链表的头插/尾插 4. 双向链表的…...
easyexcel-获取文件资源和导入导出excel
1、获取本地资源文件,根据模板填充数据导出 public void exportExcel(HttpServletResponse httpResponse, RequestBody AssayReportDayRecordQuery query) {AssayReportDayRecordDTO dto this.queryByDate(query);ExcelWriter excelWriter null;ExcelUtil.config…...
Android Monkey自动化测试
monkey一般用于压力测试,用户模拟用户事件 monkey 基本用法 adb shell monkey [参数] [随机事件数]monkey常用命令 -v:用于指定反馈信息级别,总共分三个等级-v -v -vadb shell mokey -v -v -v 100-s:用于指定伪随机数生成器的种…...
C++ //练习 11.20 重写11.1节练习(第376页)的单词计数程序,使用insert代替下标操作。你认为哪个程序更容易编写和阅读?解释原因。
C Primer(第5版) 练习 11.20 练习 11.20 重写11.1节练习(第376页)的单词计数程序,使用insert代替下标操作。你认为哪个程序更容易编写和阅读?解释原因。 环境:Linux Ubuntu(云服务…...
Nginx 安装与实践
目录 一、安装 Nginx1、先安装 Brew2、再安装 Nginx 二、常用的 Nginx 命令三、简单的 Nginx 配置四、查看日志的 Linux 命令1、查看日志的 Linux 命令2、实时查看项目运行时打印的日志 一、安装 Nginx 推荐使用 HomeBrew 来安装 Nginx。 1、先安装 Brew 详见:Home…...
QT 创建线程的几种方法
//qt创建线程的几种方法 //在Qt中,创建线程的主要方法有以下几种: //1.继承QThread类重写run方法 class MyThread : public QThread { Q_OBJECT public: void run() override { // 在这里执行你的代码 } }; // 使用 MyThread *myThread n…...
RocketMQ的简单使用
这里需要创建2.x版本的springboot项目 导入依赖 <dependencies><dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.3</version></dependency>&…...
速盾:服务器有cdn 带宽上限建议多少
CDN(内容传输网络)是一种通过分布在全球不同地点的服务器来提供高效内容分发的技术。当用户请求访问某个网站时,CDN会根据用户的地理位置,将内容从离用户最近的服务器上提供给用户,这样可以减少延迟和带宽消耗…...
智慧工地安全+绿色施工方案
塔机监测 塔吊监测可以实现对塔机监测、群塔防碰撞、塔机区域防护和吊钩可视化 1司机身份识别认证:只有司机在监控设备进行刷卡、指纹、人脸、虹膜验证身份后才能进行设备的作业操作。 2运行工况采集与显示:清晰实时显示起重机械设备运行工况,主要显示的内容:起重量、起…...
SQL Server 存储过程:BBS论坛(表结构文档下载及30个存储过程)
基于 Asp.Net 和 SQL Server 实现了一个BBS论坛,论坛功能比较强大,论坛大部分业务逻辑基于存储过程实现,记录一下。 BBS论坛存储过程清单 序号存储过程功能说明1sp_bbs_admin_add添加管理员2sp_bbs_admin_del删除系统管理员3sp_bbs_admin_m…...
03 Python进阶:MySQL - mysql-connector
mysql-connector安装 要在 Python 中使用 MySQL 数据库,你需要安装 MySQL 官方提供的 MySQL Connector/Python。下面是安装 MySQL Connector/Python 的步骤: 首先,确保你已经安装了 Python,如果没有安装,可以在 Python…...
InnoDB 行记录格式(“存储一行行数据的结构“)
1.行格式 1.1 Compact行格式 1.1.1 示意图 1.1.2 准备一下 1)建表 mysql> CREATE TABLE record_format_demo (-> c1 VARCHAR(10),-> c2 VARCHAR(10) NOT NULL,-> c3 CHAR(10),-> c4 VARCHAR(10)-> ) CHARSETascii ROW_FORMATCOM…...
【洛谷】P9236 [蓝桥杯 2023 省 A] 异或和之和
题目链接 P9236 [蓝桥杯 2023 省 A] 异或和之和 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路 1. 暴力求解 直接枚举出所有子数组,求每个子数组的异或和,再对所有的异或和求和 枚举所有子数组的时间复杂度为O(N^2)&…...
ThreadLocal加切面实现线程级别的方法缓存
1、实现效果 当一个请求线程多次请求A方法时,只会触发一次A方法的实际调用,会将方法结果缓存起来,避免多次调用。 2、实现过程 1. 需要一个注解ThreadLocalCache,在需要缓存的方法上加上该注解 2. 需要一个切面,借助ThreadLocal,将结果缓存起来,利用环绕通知来实现方法拦截从…...
使用 Flume 将 CSV 数据导入 Kafka:实现实时数据流
使用 Flume 将 CSV 数据导入 Kafka:实现实时数据流 文介绍了如何使用 Apache Flume 将 CSV 格式的数据从本地文件系统导入到 Apache Kafka 中,以实现实时数据流处理。通过 Flume 的配置和操作步骤,我们可以轻松地将数据从 CSV 文件中读取并发…...
对代理模式的理解
目录 一、前言二、案例1 代码2 自定义代理类【静态代理】2.1 一个接口多个实现,到底注入哪个依赖呢?2.1.1 Primary注解2.1.2 Resource注解(指定name属性)2.1.3 Qualifier注解 2.2 面向接口编程2.3 如果没接口咋办呢?2.…...
#QT项目实战(天气预报)
1.IDE:QTCreator 2.实验: 3.记录: (1)调用API的Url a.调用API获取IP whois.pconline.com.cn/ipJson.jsp?iphttp://whois.pconline.com.cn/ipJson.jsp?ip if(window.IPCallBack) {IPCallBack({"ip":&quo…...
数据挖掘|关联分析与Apriori算法详解
数据挖掘|关联分析与Apriori算法 1. 关联分析2. 关联规则相关概念2.1 项目2.2 事务2.3 项目集2.4 频繁项目集2.5 支持度2.6 置信度2.7 提升度2.8 强关联规则2.9 关联规则的分类 3. Apriori算法3.1 Apriori算法的Python实现3.2 基于mlxtend库的Apriori算法的Python实现 1. 关联分…...
ChatGPT Excel 大师
原文:ChatGPT Excel Mastery 译者:飞龙 协议:CC BY-NC-SA 4.0 序言 欢迎来到 Excel 掌握的变革之旅,在这里,尖端技术和永恒专业知识在“ChatGPT Excel 掌握:释放专家技巧和窍门的力量”中融合。在当今快节…...
C 语言中的 end, _end 符号
使用 man 3 end 可以看到相关符号的解释 这些符号不是在 C 语言文件和头文件中定义的,它们是 ld 在链接所有 .o 文件的时候自己添加的。 end 和 _end 的地址,就是最终程序的堆的起始地址 要打印它们的话,一个样例程序在下面: …...
绿联 安装PDF工具
这是一个强大的本地托管的基于 Web 的 PDF 操作工具,使用 docker,允许您对 PDF 文件执行各种操作,例如拆分、合并、转换、重组、添加图像、旋转、压缩等。这个本地托管的 Web 应用程序最初是 100% ChatGPT 制作的应用程序,现已发展…...
备战蓝桥杯---数论相关问题
目录 一、最大公约数和最小公倍数 二、素数判断 三、同余 四、唯一分解定理 五、约数个数定理 六、约数和定理 五、快速幂 六、费马小定理 七、逆元 一、最大公约数和最小公倍数 文章链接:最大公约数和最小公倍数 二、素数判断 文章链接:在J…...
苹果手表Apple Watch录了两个半小时的录音,却只能播放4秒,同步到手机也一样,还能修复好吗?
好多人遇到这个情况,用苹果手表Apple Watch录音,有的录1个多小时,有的录了3、4小时,甚至更长时间,因为手表没电,忘记保存等原因造成录音损坏,都是只能播放4秒,同步到手机也一样&…...
RGB三通道和灰度值的理解
本文都是来自于chatGPT的回答!!! 目录 Q1:像素具有什么属性?Q2:图像的色彩是怎么实现的?Q3:灰度值和颜色值是一个概念吗?Q4:是不是像素具有灰度值,也有三个颜色分量RGB?Q5:灰度图像是没有色彩的吗?Q6: 彩色图像是既具有灰度值也具有RGB三…...
ARM、X86、RISC-V三分天下
引入: 简单的介绍一下X86、ARM、RISC-V三种cpu架构的区别和应用场景。 目录 简单概念讲解 1. X86架构 2. ARM架构 3. RISC-V架构 应用场景 X86、ARM和RISC-V是三种不同的CPU架构,它们在设计理念、指令集和应用场景上有一些区别。 简单概念讲解 1. X…...
力控机器人原理及力控制实现
力控机器人原理及力控制实现 力控机器人是一种能够感知力量并具有实时控制能力的机器人系统。它们可以在与人类进行精准协作和合作时,将力传感技术(Force Sensing Technology)和控制算法(Control Algorithm)结合起来&a…...
最小生成树
最小生成树问题是指给定一个带权的无向图,删除一些边使得这个无向图变成一棵树,并且权值之和最小。 解决此类问题的方法主要有两种:Prim算法,Kruskal算法 Prim 算法 从一个点开始,逐步扩展,每次选择权值…...
请私人做网站风险/新开发的app怎么推广
FER转载于:https://www.cnblogs.com/hengguangliu/p/5994093.html...
提供微商城网站建设/北京网站seo服务
文章目录创建私钥创建CSR批准证书签名请求获取证书绑定角色添加到kubeconfig创建私钥 openssl genrsa -out kevin.key 2048 openssl req -new -key kevin.key -out kevin.csr创建CSR cat <<EOF | kubectl apply -f - apiVersion: certificates.k8s.io/v1beta1 kind: Ce…...
云主机系统/seo学校培训课程
当我们在电脑上调试前端应用时,我们只需加几个 console.log,然后在浏览器打开开发者调试工具,就能使用运行日志、网络事件、前端储存等工具,进行代码调试。可对于移动端的前端应用而言,往往需要在移动端的浏览器上进行…...
专做it招聘的网站/百度推广销售员好做吗
在linux下输入长文件名小技巧(转)这个小技巧其实是写给新手们的,老手们恐怕会嗤之以鼻,而且我还不能算什么老手,如此看来似乎确实有些不妥。但是又转念一想即使是新手也未必不能给新手介绍一些自己的经验。俗话说的好,愚者千虑必有…...
中国建设教育协会的是假网站吗/seo外包优化
携程目前拥有15000座席,日均电话呼出量30W左右,在如此规模的呼叫中心外呼业务中,我们不断尝试着去降低座席等待时长、提高外呼效率,从而为业务提供更加值得依赖的呼叫中心服务。 作为纯软平台,由携程自主研发的SoftPB…...
wordpress设置主从库/2021年关键词有哪些
Kendo UI for jQuery最新试用版下载 Kendo UI目前最新提供Kendo UI for jQuery、Kendo UI for Angular、Kendo UI Support for React和Kendo UI Support for Vue四个控件。Kendo UI for jQuery是创建现代Web应用程序的最完整UI库。 默认情况下,Kendo UI Grid过滤功…...