java-多态数组的多态参数

介绍

代码

employer父类

package hansunping;

public class employer {
	private String name;
	private double salary;

	public employer(String name,double salary) {
		this.name=name;
		this.salary=salary;
		// TODO Auto-generated constructor stub
	}
	public double getsalary() {
		return 12*salary;
		
	}
	public String getname () {
		return name;
		
	}

}

两个子类

worker

package hansunping;

public class woker extends employer{

	public woker(String name, double salary) {
		super(name, salary);
		// TODO Auto-generated constructor stub
	}
	public void work() {
		System.out.println("普通员工"+getname()+"isworking");
				
	}
	@Override
	public double getsalary() {//直接调用父类方法
		return super.getsalary();
	}

}

mannerge

package hansunping;

public class manner extends employer {
	private double bonus;
	public double getBonus() {
		return bonus;
	}
	public void setBonus(double bonus) {
		this.bonus = bonus;
	}
	public manner(String name, double salary,double bonus) {
		super(name, salary);
		this.bonus=bonus;
		// TODO Auto-generated constructor stub
	}
	public void manne() {
		System.out.println("经理"+getname()+"正在工作");
		
	}
	
	@Override
	public double getsalary() {
		return super.getsalary()+bonus;
		
	}
	
	
	
}

运行主类

我们在主类中看到我们创建了woker类的实例。

new woker("tom", 2500);

是类的构造器传入参数的

package hansunping;

public class demon2 {

	public static void main(String[] args) {
		woker tom=new woker("tom", 2500);
		manner mail=new manner("milain", 5000, 2000);
		demon2 polyparamer= new demon2();//对象,类,调用方法
		polyparamer.showempanual(tom);
		polyparamer.showempanual(mail);

	}
	public void showempanual(employer e ) {
		System.out.println(e.getsalary());
		
	}
}

重要的是

public void showempanual(employer e ) {
        System.out.println(e.getsalary());
        
    }

这行代码。

还是看ai的解释

这段代码展示了Java中的继承和多态。
首先,你有一个名为`employer`的父类,它有两个属性:`name`和`salary`。它还有一个构造函数来初始化这些属性,以及两个方法`getsalary`和`getname`来获取这些属性的值。
然后,你有一个名为`manner`的子类,它继承了`employer`类。`manner`类添加了一个新的属性`bonus`,并且覆盖了`getsalary`方法来包括奖金。它还有一个名为`mann`的方法来打印出经理正在工作的信息。
在`demon2`类中,你创建了两个对象:一个`worker`对象`tom`和一个`manner`对象`mail`。然后,你创建了`demon2`类的一个实例,并调用了它的`showempanual`方法,分别传递了`tom`和`mail`作为参数。
`showempanual`方法接受一个类型为`employer`的参数`e`,并调用它的`getsalary`方法。由于`manner`类覆盖了`getsalary`方法,当你传递`mail`对象时,它会调用`manner`类的`getsalary`方法,这包括了奖金。
这就是多态的作用:你可以使用一个父类类型的引用来引用子类的对象,并且调用相应的方法时,会执行子类覆盖的方法。
当你运行这个程序时,你会看到输出两个工资:一个是`tom`的工资,另一个是`mail`的工资加上奖金。
 

关于在showempanual时传入的编译类型要求是employer,但其子类也可以看作是他的编译类型在传入时可以看作是employer的编译类型。这里相当于实现了employ e=new tom().的向上转型。所以才能根据我们传入的对象不同返回相应的salary

那我们来看看向下转型的,添加一个testwork方法,强制类型转换

package hansunping;

public class demon2 {

	public static void main(String[] args) {
		woker tom=new woker("tom", 2500);
		manner mail=new manner("milain", 5000, 2000);
		demon2 polyparamer= new demon2();//对象,类,调用方法
		polyparamer.showempanual(tom);
		polyparamer.showempanual(mail);
		polyparamer.testwork(tom);
		polyparamer.testwork(mail);

	}
	public void showempanual(employer e ) {
		System.out.println(e.getsalary());
		
	}
	public void testwork(employer e ) {
		if (e instanceof woker) {//如果是属于其子类
			((woker)e ).work();//向下转型
			
		} else if (e instanceof manner) {
			((manner)e ).manne();//向下转型

		}
		else {
			System.out.println("不做处理因为不合理");
		}
		
	}
}

结果

30000.0

62000.0

普通员工tomisworking

经理milain正在工作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/708371.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GlusterFS企业分布式存储

GlusterFS 分布式文件系统代表-nfs常见分布式存储Gluster存储基础梳理GlusterFS 适合大文件还是小文件存储? 应用场景术语Trusted Storage PoolBrickVolumes Glusterfs整体工作流程-数据访问流程GlusterFS客户端访问流程 GlusterFS常用命令部署 GlusterFS 群集准备环…

职称申报总是不通过的五大原因,竟然在这里

职称评审每年都是有人通过,有人不能通过,而且有的人每年申报,但还是不通过,不通过其实都是有原因,抛开运气,有的人确实运气不好,不通过,这种没办法,但是大部分人申报没有…

Spring Cloud Gateway 详解:构建高效的API网关解决方案

Spring Cloud Gateway 详解:构建高效的API网关解决方案 Spring Cloud Gateway 是 Spring Cloud 生态系统中用于构建 API 网关的核心组件。它基于 Spring WebFlux 构建,旨在提供简单且有效的方式来路由和增强 API 请求。以下是 Spring Cloud Gateway 的详…

【Oracle篇】rman时间点异机恢复:从RAC环境到单机测试环境的转移(第六篇,总共八篇)

💫《博主介绍》:✨又是一天没白过,我是奈斯,DBA一名✨ 💫《擅长领域》:✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux,也在扩展大数据方向的知识面✌️…

VRRP跟踪接口及认证(华为)

#交换设备 VRRP跟踪接口及认证 一、相关概念 1.VRRP跟踪接口 当 VRRP 的 Master 设备的上行接口出现问题, 而 Master 设备一直保持 Active 状态,那么就会导致网络出现中断,所以必须要使得 VRRP 的运行状态和上行接口能够关联。在配置了 VRRP 元余的网…

经典的网站系统架构(入门级)

从开发到部署,从用户访问到底层数据库,介绍搭建网站系统的经典架构的10个核心部分。 (图转自bytebytego,翻译整理by dogstar) 1、使用Git管理和协同源代码,通过CI/CD或Git的Webhook方式自动同步更新部署到服…

AI赋能数据安全体系化落地,出席网安标委2024年第一次标准周“数据安全标准与能力建设研讨会”

6月13日,全国网络安全标准化技术委员会(以下简称“网安标委”)2024年第一次标准周“数据安全标准与能力建设研讨会”在南昌召开。中央网信办网络数据管理局范雪炜、工业和信息化部网络安全管理局周睿康、国家信息中心外网办安全管理处处长罗海…

红酒保存中的氧气管理:适度接触与避免过度氧化

在保存云仓酒庄雷盛红酒的过程中,我们不得不面对一个微妙的问题:氧气管理。氧气,这个我们生活中无处不在的气体,对于红酒的保存却有着至关重要的影响。适度接触氧气对红酒的陈年过程和品质维护具有积极作用,然而过度氧…

【APP移动端自动化测试】第四节.元素操作的API

文章目录 前言一、点击&输入&清空操作 1.1 点击元素 1.2 输入&清空元素二、获取文本内容&位置&大小操作 2.1 获取文本内容 2.2 获取位置&大小三、根据属性名获取属性值操作四、滑动和拖拽操作 4.1 _swipe 4.2 _scroll …

Threejs-12、场景的线性雾和指数雾

1、创建场景雾 //创建场景雾 scene.fog new THREE.Fog(0x999999,0.1,50);2、创建场景指数雾 scene.fog new THREE.FogExp2(0x999999,0.05);3、 设置场景背景颜色 scene.background new THREE.Color(0x999999);完整代码 <script setup> // 导入threejs import * as…

string类小贴士:让你的C++字符串处理更高效

目录 ​编辑 一、为什么要学习string类 1.1 C语言中的字符串 1.2 面试题 &#x1f333;字符串相加https://leetcode.cn/problems/add-strings/description/ 二、标准库中的string类 2.1 string类 2.2 string类的常用接口说明 1. string类对象的常见构造 2. string类对…

精准定位,智慧提纯:高级数据提取策略

在数据驱动的时代&#xff0c;高级数据提取策略成为企业决策、科学研究以及各类项目成功的关键。数据提取&#xff0c;不仅仅是简单地收集信息&#xff0c;而是需要精准定位目标数据&#xff0c;并通过智慧提纯方法&#xff0c;从海量数据中提取出有价值、有深度的信息。本文将…

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第40课-实时订阅后端数据

【WEB前端2024】3D智体编程&#xff1a;乔布斯3D纪念馆-第40课-实时订阅后端数据 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引…

程序员要学会偷懒--excel转建表语句

如下需求&#xff1a;一个复杂的统战系统&#xff0c;用户信息字段总共有26个sheet&#xff0c;54张小表&#xff0c;没有什么复杂的业务逻辑&#xff0c;纯增删改查。字段目测在1000个以上。建表54张。领导交待了一句这周末完成&#xff0c;我&#xff1f;&#xff1f;&#x…

【数组】【快慢双指针】删除有序数组中的重复项+移除元素+删除有序数组中的重复项II

今天趁热打铁&#xff0c;接着刷了几道标签是【数组】的题&#xff0c;基本都是双指针就能解决。 1、删除有序数组中的重复项 该题对应力扣网址 class Solution { public:int removeDuplicates(vector<int>& nums) {int i,j;int count 0;int n nums.size();nums.…

vue3+ Element-Plus 点击勾选框往input中动态添加多个tag

实现效果&#xff1a; template&#xff1a; <!--产品白名单--><div class"con-item" v-if"current 0"><el-form-item label"平台名称"><div class"contaion" click"onclick"><!-- 生成的标签 …

下载NVIDIA官网的培训视频,生成中文字幕和PPT

下载NVIDIA官网的培训视频,生成中文字幕和PPT 一.[视频网站](https://www.nvidia.cn/on-demand/session/gtc24-s62129/)二.如何获取视频的原始链接三.下载视频的脚本【生成output.mp4】四.安装whisper环境【语音识别生成英文字幕】五.下载whisper模型六.生成英文字幕【输出merg…

解决微调后的模型导入ollama后出现”胡言乱语“情况

解决微调后的模型导入ollama后出现”胡言乱语“情况 先说结论&#xff0c;出现该问题的原因主要是因为Modelfile文件没有配置好。 这个是ModelFile文件的配置&#xff0c;第一行的from为要用的模型地址。 # sets the temperature to 1 [higher is more creative, lower is mo…

陪诊小程序开发,陪诊师在线接单

近几年&#xff0c;陪诊师成为了一个新兴行业&#xff0c;在科技时代中&#xff0c;陪诊小程序作为互联网下的产物&#xff0c;为陪诊市场带来了更多的便利。 当下生活压力大&#xff0c;老龄化逐渐严重&#xff0c;年轻人很难做到陪同家属看病。此外&#xff0c;就诊中出现了…

Vue3项目中Pinia使用详解

开篇 本文的目的是创建一个使用typescript的vue3项目&#xff0c;并使用pinia来管理状态。 详细步骤 创建项目 创建vue3项目&#xff0c;并使用vite作为打包工具 npm create vitelatest vue3_pinia // 选择vue,随后选择typesript进入项目&#xff0c;并按照依赖包 cd vue3_…