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

java_多态的应用

多态数组

在这里插入图片描述

应用实例:现有一个继承结构如下:要求创建 1 个 Person 对象、2 个 Student 对象和 2 个 Teacher 对象, 统一放在数组中,并调用每个对象

代码
Person类

package com.hspedu.poly_.polyarr_;import javax.swing.*;/*** @author:寰愬悏瓒�* @date:2024/12/14 version:1.0*/
public class Person {private String name;private int age;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 String say() {return name +"\t" +  age;}
}

Student类

package com.hspedu.poly_.polyarr_;
import com.hspedu.poly_.polyarr_.Person;
/*** @author:寰愬悏瓒�* @date:2024/12/14 version:1.0*/
public class Student extends Person {private double score;public Student(String name, int age, double score) {super(name, age);this.score = score;}public double getScore() {return score;}public void setScore(double score) {this.score = score;}// 重写父类 say@Overridepublic String say() {return "学生 " + super.say() + " score = " + score;}
}

Teacher类

package com.hspedu.poly_.polyarr_;public class Teacher extends Person {private double salary;public Teacher(String name, int age, double salary) {super(name, age);this.salary = salary;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}
// 重写父类的say() 方法@Overridepublic String say() {return "老师 " + super.say() + " salary= " + salary;}
}

PloyArray类

package com.hspedu.poly_.polyarr_;/*** @author:寰愬悏瓒�* @date:2024/12/14 version:1.0*/
public class PloyArray {public static void main(String[] args) {
/*
* 应用实例:现有一个继承结构如下:要求创建 1 个 Person 对象、
* 2 个 Student 对象和 2 个 Teacher 对象, 统一放在数组
中,并调用每个对象
*/Person[] persons = new Person[5];persons[0] = new Person("jack",20);persons[1] = new Student("jack",18,100);persons[2] = new Student("smith",19, 30.1);persons[3] = new Teacher("scott",30,20000);persons[4] = new Teacher("king",50,25000);//        循环遍历多态数组,调用sayfor(int i = 0; i < persons.length; i++ ){
//            person[i] 编译类型是 Person, 运行类型是 根据实际情况由JVM来判断System.out.println(persons[i].say());//动态绑定机制}}
}

应用实例升级:

如何调用子类特有的方法,比如
Teacher 有一个 teach , Student 有一个 study
怎么调用?
Teacher类增加teach()方法

//    特有的方法public void teach() {System.out.println("老师 " + getName() +" 正在上课");}

Student类增加study()方法

//    特有方法public void study() {System.out.println("学生 "  + getName() + " 正在学java");}

修改PloyArray类

package com.hspedu.poly_.polyarr_;public class PloyArray {public static void main(String[] args) {
/*
* 应用实例:现有一个继承结构如下:要求创建 1 个 Person 对象、
* 2 个 Student 对象和 2 个 Teacher 对象, 统一放在数组
中,并调用每个对象
*/Person[] persons = new Person[5];persons[0] = new Person("jack",20);persons[1] = new Student("mary",18,100);persons[2] = new Student("smith",19, 30.1);persons[3] = new Teacher("scott",30,20000);persons[4] = new Teacher("king",50,25000);//        循环遍历多态数组,调用sayfor(int i = 0; i < persons.length; i++ ){
//            person[i] 编译类型是 Person, 运行类型是 根据实际情况由JVM来判断System.out.println(persons[i].say());//动态绑定机制if(persons[i] instanceof Student) { // 判断person[i] 的运行类型是不是 StudentStudent student = (Student)persons[i]; //向下转型student.study();// 也可以使用一条语句 ((Student)persons[i]).study();} else if(persons[i] instanceof Teacher) {Teacher teacher = (Teacher)persons[i];teacher.teach();} else if(persons[i] instanceof Person){} else {System.out.println("你的类型有问题,请自己检查...");}}}
}

多态参数

在这里插入图片描述
代码:
Employee类

package com.hspedu.poly_.polyparameter_;public class Employee {private String name;private double salary;public String getName() {return name;}public void setName(String name) {this.name = name;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}public Employee(String name, double salary) {this.name = name;this.salary = salary;}//得到年工资的方法public double getAnnual() {return 12*salary;}
}

Manager类

package com.hspedu.poly_.polyparameter_;public class Manager extends Employee {private double bonus;public Manager(String name, double salary, double bonus) {super(name, salary);this.bonus = bonus;}public double getBonus() {return bonus;}public void setBonus(double bonus) {this.bonus = bonus;}public void manage(){System.out.println("经理 " + getName() + " is manageing");}//重写获取年薪方法@Overridepublic double getAnnual() {return super.getAnnual()+bonus;}
}

Worker类

package com.hspedu.poly_.polyparameter_;public class Worker extends Employee{public Worker(String name, double salary) {super(name, salary);}public void work() {System.out.println("员工 " + getName() + " is working");}//因为普通员工没有其它收入,则直接调用父类方法@Overridepublic double getAnnual() {return super.getAnnual();}
}

Ployparameter类

package com.hspedu.poly_.polyparameter_;import com.sun.corba.se.spi.orbutil.threadpool.Work;public class Ployparameter {public static void main(String[] args) {Worker tom = new Worker("tom", 2500);Manager milian = new Manager("milian", 5000, 20000);Ployparameter ployparameter = new Ployparameter();ployparameter.showEmpAnnual(tom);ployparameter.showEmpAnnual(milian);ployparameter.testWork(tom);ployparameter.testWork(milian);}//实现获取任何员工对象的年工资,并在 main 方法中调用该方法 [e.getAnnual()]public void showEmpAnnual(Employee e) {System.out.println(e.getAnnual());//动态绑定机制}//添加一个方法,testWork,如果是普通员工,则调用 work 方法,如果是经理,则调用 manage 方法public void testWork(Employee e) {if(e instanceof Worker) {((Worker) e).work();  //向下转型} else if(e instanceof Manager) {((Manager) e).manage(); //向下转型} else {System.out.println("你的类型不对,不做任何处理");}}
}

相关文章:

java_多态的应用

多态数组 应用实例:现有一个继承结构如下&#xff1a;要求创建 1 个 Person 对象、2 个 Student 对象和 2 个 Teacher 对象, 统一放在数组中&#xff0c;并调用每个对象 代码 Person类 package com.hspedu.poly_.polyarr_;import javax.swing.*;/*** author:寰愬悏瓒&#xf…...

Python+OpenCV系列:模版匹配

文章目录 1. 模板匹配基本原理2. cv2.matchTemplate() 函数函数原型&#xff1a; 3. 模板匹配步骤4. 单目标模板匹配示例5. 多目标模板匹配多目标模板匹配示例代码解析&#xff1a; 6. 多模板匹配多模板匹配示例代码解析 7. 总结 模板匹配是一种在图像中寻找模板的位置的方法。…...

【从零开始入门unity游戏开发之——C#篇10】循环结构——while、do-while、for、foreach的使用

文章目录 一、while 循环1、语法&#xff1a;2、示例&#xff1a; 二、 do-while 循环1、语法&#xff1a;2、示例&#xff1a; 三、for 循环1、语法&#xff1a;2、示例&#xff1a; 四、foreach 循环1、语法&#xff1a;2、示例&#xff1a; 五、总结对比六、注意事项七、使用…...

Spring Boot项目使用虚拟线程

Spring Boot项目启用虚拟线程 开始基本使用先写一个测试方法通过springboot配置项开启虚拟线程 目前存在的问题 开始 虚拟线程正式发布是在JDK21&#xff0c;对于Spring Boot版本选择3以上。 基本使用 关于虚拟线程本身的使用&#xff0c;之前已经介绍过。这里要说的是直接将…...

实现SpringBoot项目嵌入其他项目

很多时候我们需要在项目里面嵌入其他项目或者被其他项目嵌入&#xff0c;如我们开发一个开源项目b&#xff0c;用户需要在自己的项目a嵌入b项目&#xff0c;使用b项目的功能&#xff0c;而且要实现a项目工作最小化&#xff0c;最好实现引入即用。 1.定义b项目的自定义配置 …...

朗致面试---IOS/安卓/Java/架构师

朗致面试---IOS/安卓/Java/架构师 一、面试概况二、总结三、算法题目参考答案 一、面试概况 一共三轮面试&#xff1a; 第一轮是逻辑行测&#xff0c;25道题目&#xff0c;类似于公务员考试题目&#xff0c;要求90分钟内完成。第二轮是技术面试&#xff0c;主要是做一些数据结…...

数字信号处理:FIR滤波器

FIR&#xff08;Finite Impulse Response&#xff0c;有限脉冲响应&#xff09;滤波器是一种数字滤波器&#xff0c;其输出信号是输入信号的加权线性组合。FIR滤波器以其线性相位特性和易于设计的优势&#xff0c;广泛应用于信号处理、通信、音频处理等领域。 FIR滤波器的特点…...

鲲鹏麒麟安装Kafka-v1.1.1

因项目需要在鲲鹏麒麟服务器上安装Kafka v1.1.1&#xff0c;因此这里将安装配置过程记录下来。 环境说明 # 查看系统相关详细信息 [roottest kafka_2.12-1.1.1]# uname -a Linux test.novalocal 4.19.148 #1 SMP Mon Oct 5 22:04:46 EDT 2020 aarch64 aarch64 aarch64 GNU/Li…...

群控系统服务端开发模式-应用开发-操作记录功能开发

一、开放路由 在根目录下route文件夹下修改app.php文件&#xff0c;代码如下&#xff1a; // 操作日志Route::get(token/get_list,permission.Token/getList);// 获取操作日志列表Route::post(token/get_all,permission.Token/getAll);// 获取操作日志所有数据Route::post(toke…...

昇思25天学习打卡营第33天|共赴算力时代

文章目录 一、平台简介二、深度学习模型2.1 处理数据集2.2 模型训练2.3 加载模型 三、共赴算力时代 一、平台简介 昇思大模型平台&#xff0c;就像是AI学习者和开发者的超级基地&#xff0c;这里不仅提供丰富的项目、模型和大模型体验&#xff0c;还有一大堆经典数据集任你挑。…...

Vue 让视图区域滑到指定位置、回到顶部

滑倒指定位置&#xff1a;获取指定的dom&#xff0c;然后用scrollIntoView使dom出现在视图区域 回到顶部&#xff1a;操作父级dom的scrollTop 0&#xff0c;让该父级下的列表回到顶部 代码如下 <template><div class"testDemo"><div><el-bu…...

EasyGBS点对点穿透P2P远程访问技术在安防视频监控中的应用

随着信息技术的快速发展&#xff0c;安防视频监控系统在公共安全领域的应用变得越来越广泛。传统的视频监控系统多依赖于中心服务器进行视频流的集中处理和分发&#xff0c;这不仅增加了网络带宽的负担&#xff0c;还可能成为系统性能瓶颈。为了解决这些问题&#xff0c;P2P&am…...

Android 使用 Gson + OkHttp 实现 API 的常规使用(个人心得)

学习笔记 一、依赖和权限的添加 网络权限: 在 Android 中进行网络请求时,必须声明权限,确保应用具有访问互联网的能力。 <uses-permission android:name="android.permission.INTERNET"/> 依赖项: 确保在 build.gradle 中添加以下依赖: dependencies …...

WPF+MVVM案例实战与特效(三十九)- 深度剖析一个弧形进度条的实现

文章目录 1、使用 Path 结合 ArcSegment 绘制圆弧1、属性解读2、静态圆弧3、动态圆弧4、运行效果5、圆弧两端点的形状2、总结1、使用 Path 结合 ArcSegment 绘制圆弧 1、属性解读 Path 是 WPF 中的一个标记元素,用于绘制复杂的几何路径形状,而 ArcSegment 用于描述 Path 中…...

opencv——图片矫正

图像矫正 图像矫正的原理是透视变换&#xff0c;下面来介绍一下透视变换的概念。 听名字有点熟&#xff0c;我们在图像旋转里接触过仿射变换&#xff0c;知道仿射变换是把一个二维坐标系转换到另一个二维坐标系的过程&#xff0c;转换过程坐标点的相对位置和属性不发生变换&a…...

前端核心知识总结

‌前端架构知识总结‌主要包括以下几个方面&#xff1a; ‌HTML‌&#xff1a;HTML是构建网页的基础&#xff0c;使用各种标签定义网页的结构&#xff0c;如<html>、<head>、<body>等。HTML5引入了新的语义化标签&#xff0c;如<article>、<section…...

【C语言】五子棋(c语言实现)

这里写目录标题 一、最终效果二、菜单打印函数三、棋盘的初始化和打印四、 人人对战4.1 落子判空函数4.2 悔棋函数4.3 判胜负函数4.4 人人对战 五、人机对战5.1 是将直接调用rand生成随机值&#xff0c;这就不可控5.2 是根据棋子赢面来判断哪里落子最好 六、如果选择退出程序直…...

【数据结构——查找】顺序查找(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 测试说明 我的通关代码: 测试结果&#xff1a; 任务描述 本关任务&#xff1a;实现顺序查找的算法。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.根据输入数据建立顺序表&#xff0c;2.顺序表的输出&#xff0c;…...

Python的3D可视化库【vedo】2-1 (plotter模块) 绘制器的使用

文章目录 1 相关用语及其关系2 Plotter类的基本使用3 Plotter类具体的初始化设置3.1 全部初始化参数3.2 使用不同的axes vedo是Python实现的一个用于辅助科学研究的3D可视化库。 vedo的plotter模块封装了绘制器类Plotter。 Plotter实例可以用于显示3D图形对象、控制渲染器行为、…...

6.1 初探MapReduce

MapReduce是一种分布式计算框架&#xff0c;用于处理大规模数据集。其核心思想是“分而治之”&#xff0c;通过Map阶段将任务分解为多个简单任务并行处理&#xff0c;然后在Reduce阶段汇总结果。MapReduce编程模型包括Map和Reduce两个阶段&#xff0c;数据来源和结果存储通常在…...

3分钟搭建你的微信智能管家:零代码实现24小时自动回复

3分钟搭建你的微信智能管家&#xff1a;零代码实现24小时自动回复 【免费下载链接】WechatBot 项目地址: https://gitcode.com/gh_mirrors/wechatb/WechatBot 想要一个能帮你自动处理微信消息的智能助手吗&#xff1f;WechatBot微信机器人让你在3分钟内拥有一个全天候在…...

从PyTorch/Onnx、AIMET量化到 QNN GPU 部署全流程实战:GPU 推理 300FPS+

YOLOv8s 从 AIMET 量化到 QNN GPU 部署全流程实战、GPU 推理 3ms/帧 1. 环境准备 组件 版本/路径 QNN SDK v2.45.0.260326 Android NDK r26d 目标设备 Qualcomm SM8750 目标架构 aarch64-android export QNN_TARGET_ARCH="aarch64-android" export NDK_ROOT=/home/mi…...

windows系统安装gitblit经验分享

1、下载gitblithttp://www.gitblit.com/下载解压后如下图所示&#xff1a;2、安装与配置&#xff08;1&#xff09;修改data/defaults.properties#git仓库地址git.repositoriesFolder E:/GitRepo/git# 配置http访问端口server.httpPort 8090# 配置http访问git时的IP地址serve…...

量化交易开发实战指南:从入门到部署

量化交易开发实战指南&#xff1a;从入门到部署 【免费下载链接】StockSharp Algorithmic trading and quantitative trading open source platform to develop trading robots (stock markets, forex, crypto, bitcoins, and options). 项目地址: https://gitcode.com/gh_mi…...

wsl2开发新手必看,快马平台带你轻松搞定linux环境配置与基础开发

作为一个刚接触WSL2的新手开发者&#xff0c;我最近在InsCode(快马)平台上完成了一个Linux环境配置的入门项目&#xff0c;整个过程比想象中简单很多。这里把我的学习笔记分享给大家&#xff0c;希望能帮助其他新手少走弯路。 WSL2安装与配置 刚开始最头疼的就是安装环节&#…...

性能测试中的“假阳性”:如何识别与避免?

在软件性能测试领域&#xff0c;“假阳性”是一个令测试团队既头疼又难以回避的挑战。它指的是测试报告或监控工具错误地发出性能警报&#xff0c;声称系统存在性能瓶颈或缺陷&#xff0c;但经过深入分析或在实际环境中验证&#xff0c;发现系统运行状态良好&#xff0c;并不存…...

如何通过LCU API构建现代化英雄联盟工具箱:从技术选型到实战应用

如何通过LCU API构建现代化英雄联盟工具箱&#xff1a;从技术选型到实战应用 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 想象一下这样的场…...

哈尔滨工业大学学位论文latex模板下载及编译方法

1、下载文件夹chinese&#xff1a;https://download.csdn.net/download/wzz110011/92774930?spm1011.2124.3001.6210 2、安装TexStudio 3、设置TexStuidio编译器为XeLaTex&#xff0c;具体设置方法可百度...

并发之AQS

AQS 完整流程图 核心笔记一、AQS 核心结构 AQS state(同步状态) CLH 双向队列 LockSupport二、AQS 加锁流程图&#xff08;最关键&#xff09; 线程开始↓ 判断 state 是否为 0↓ 是 → CAS 尝试将 state 0 → 1↓ 成功 → 获取锁成功&#xff08;设置当前线程为持有线程&a…...

岐金兰非专业独立研究成果概述(精简版)

岐金兰非专业独立研究成果概述&#xff08;精简版&#xff09; 岐金兰以非专业、体制外、独立研究者的身份&#xff0c;围绕“自感”构建了涵盖哲学、AI伦理、文明比较与技术治理的原创思想体系&#xff08;包括“AI元人文”“自感大儒家观”“伦理中间件”“圆融具身”等概念&…...