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

多态.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&#xff08;内容传输网络&#xff09;是一种通过分布在全球不同地点的服务器来提供高效内容分发的技术。当用户请求访问某个网站时&#xff0c;CDN会根据用户的地理位置&#xff0c;将内容从离用户最近的服务器上提供给用户&#xff0c;这样可以减少延迟和带宽消耗&#xf…...

智慧工地安全+绿色施工方案

塔机监测 塔吊监测可以实现对塔机监测、群塔防碰撞、塔机区域防护和吊钩可视化 1司机身份识别认证:只有司机在监控设备进行刷卡、指纹、人脸、虹膜验证身份后才能进行设备的作业操作。 2运行工况采集与显示:清晰实时显示起重机械设备运行工况,主要显示的内容:起重量、起…...

SQL Server 存储过程:BBS论坛(表结构文档下载及30个存储过程)

基于 Asp.Net 和 SQL Server 实现了一个BBS论坛&#xff0c;论坛功能比较强大&#xff0c;论坛大部分业务逻辑基于存储过程实现&#xff0c;记录一下。 BBS论坛存储过程清单 序号存储过程功能说明1sp_bbs_admin_add添加管理员2sp_bbs_admin_del删除系统管理员3sp_bbs_admin_m…...

03 Python进阶:MySQL - mysql-connector

mysql-connector安装 要在 Python 中使用 MySQL 数据库&#xff0c;你需要安装 MySQL 官方提供的 MySQL Connector/Python。下面是安装 MySQL Connector/Python 的步骤&#xff1a; 首先&#xff0c;确保你已经安装了 Python&#xff0c;如果没有安装&#xff0c;可以在 Python…...

InnoDB 行记录格式(“存储一行行数据的结构“)

1.行格式 1.1 Compact行格式 1.1.1 示意图 1.1.2 准备一下 1&#xff09;建表 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. 暴力求解 直接枚举出所有子数组&#xff0c;求每个子数组的异或和&#xff0c;再对所有的异或和求和 枚举所有子数组的时间复杂度为O&#xff08;N^2&#xff09;&…...

ThreadLocal加切面实现线程级别的方法缓存

1、实现效果 当一个请求线程多次请求A方法时,只会触发一次A方法的实际调用,会将方法结果缓存起来,避免多次调用。 2、实现过程 1. 需要一个注解ThreadLocalCache,在需要缓存的方法上加上该注解 2. 需要一个切面,借助ThreadLocal,将结果缓存起来,利用环绕通知来实现方法拦截从…...

使用 Flume 将 CSV 数据导入 Kafka:实现实时数据流

使用 Flume 将 CSV 数据导入 Kafka&#xff1a;实现实时数据流 文介绍了如何使用 Apache Flume 将 CSV 格式的数据从本地文件系统导入到 Apache Kafka 中&#xff0c;以实现实时数据流处理。通过 Flume 的配置和操作步骤&#xff0c;我们可以轻松地将数据从 CSV 文件中读取并发…...

对代理模式的理解

目录 一、前言二、案例1 代码2 自定义代理类【静态代理】2.1 一个接口多个实现&#xff0c;到底注入哪个依赖呢&#xff1f;2.1.1 Primary注解2.1.2 Resource注解&#xff08;指定name属性&#xff09;2.1.3 Qualifier注解 2.2 面向接口编程2.3 如果没接口咋办呢&#xff1f;2.…...

#QT项目实战(天气预报)

1.IDE&#xff1a;QTCreator 2.实验&#xff1a; 3.记录&#xff1a; &#xff08;1&#xff09;调用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…...

Cross-Modal Prototype Alignment and Mixing for Training-Free Few-Shot Classification

Cross-Modal Prototype Alignment and Mixing for Training-Free Few-Shot Classification Authors: Dipam Goswami, Simone Magistri, Gido M. van de Ven, Bartłomiej Twardowski, Andrew D. Bagdanov, Tinne Tuytelaars, Joost van de Weijer Deep-Dive Summary: 跨模态…...

从希腊字母到优化问题:用Overleaf搞定LaTeX数学公式的20个高阶技巧

从希腊字母到优化问题&#xff1a;用Overleaf搞定LaTeX数学公式的20个高阶技巧 数学公式排版是LaTeX最强大的功能之一&#xff0c;但对于需要处理复杂数学内容的研究者和工程师来说&#xff0c;仅掌握基础语法远远不够。本文将分享20个经过实战验证的高阶技巧&#xff0c;帮助你…...

计算机毕业设计springboot英语学习网站 基于SpringBoot的在线英语教育平台设计与实现 SpringBoot框架下的智能化英语辅助学习系统开发

计算机毕业设计springboot英语学习网站3i8387gp &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。全球化时代对英语能力的需求日益增长&#xff0c;信息技术在教育领域的广泛应用推…...

如何轻松实现QQ空间历史数据自动化备份:GetQzonehistory完整解决方案指南

如何轻松实现QQ空间历史数据自动化备份&#xff1a;GetQzonehistory完整解决方案指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 还在为QQ空间里的青春回忆可能丢失而担心吗&#x…...

嵌入式行业职业发展路径

嵌入式行业职业规划&#xff1a;技术→管理→经营→投资 这个路径代表了嵌入式从业者从执行者到决策者、从专业人才到复合型领袖的典型进阶之路。以下分阶段详解每个层级的核心任务、能力要求及转型关键。第一阶段&#xff1a;技术深耕&#xff08;0-5年&#xff09; 核心定位&…...

Neeshck-Z-lmage_LYX_v2实战教程:异常友好提示机制与错误定位指南

Neeshck-Z-lmage_LYX_v2实战教程&#xff1a;异常友好提示机制与错误定位指南 1. 引言&#xff1a;当绘画工具变得“会说话” 想象一下&#xff0c;你兴致勃勃地打开一个AI绘画工具&#xff0c;输入了一段精心构思的描述&#xff0c;点击生成&#xff0c;然后……页面卡住了。…...

告别传统BPMN:wflow工作流设计器如何让普通员工5分钟搭建审批流程?

告别传统BPMN&#xff1a;wflow工作流设计器如何让普通员工5分钟搭建审批流程&#xff1f; 【免费下载链接】wflow workflow 工作流设计器&#xff0c;企业OA流程设计。表单流程设计界面操作超级简单&#xff01;&#xff01;普通用户也能分分钟上手&#xff0c;不需要专业知识…...

Yahoo Finance API 金融数据接口实战指南:从技术原理到商业价值落地

Yahoo Finance API 金融数据接口实战指南&#xff1a;从技术原理到商业价值落地 【免费下载链接】YahooFinanceApi A handy Yahoo! Finance api wrapper, based on .NET Standard 2.0 项目地址: https://gitcode.com/gh_mirrors/ya/YahooFinanceApi 一、价值定位&#x…...

Llama-3.2V-11B-cot多轮对话效果展示:复杂技术问题拆解与解答

Llama-3.2V-11B-cot多轮对话效果展示&#xff1a;复杂技术问题拆解与解答 最近在测试各种大模型时&#xff0c;我特意找了一个比较“刁钻”的场景&#xff1a;让模型来解答一个复杂的系统设计问题。这类问题通常不是一两句话能说清的&#xff0c;它需要模型有很强的逻辑推理能…...

别再踩坑了!Docker部署MinIO时,API和Console端口配置的保姆级避坑指南

Docker部署MinIO的端口配置避坑指南&#xff1a;从原理到实战 第一次用Docker部署MinIO时&#xff0c;我花了整整三个小时才搞明白为什么外网始终无法访问。控制台显示服务已启动&#xff0c;本地curl也能返回数据&#xff0c;但就是无法通过浏览器打开管理界面。直到查看日志才…...