java-多态数组的多态参数

news2025/3/3 5:19:29

介绍

代码

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正在工作

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[C#]使用C#部署yolov10的目标检测tensorrt模型

【测试通过环境】 win10 x64vs2019 cuda11.7cudnn8.8.0 TensorRT-8.6.1.6 opencvsharp4.9.0 .NET Framework4.7.2 NVIDIA GeForce RTX 2070 Super cuda和tensorrt版本和上述环境版本不一样的需要重新编译TensorRtExtern.dll,TensorRtExtern源码地址:T…

Python基于 Jupyter Notebook 的图形可视化工具库之ipysigma使用详解

概要 在数据科学和网络分析中,图(Graph)结构是一种常用的数据结构,用于表示实体及其关系。为了方便图数据的可视化和交互操作,ipysigma 提供了一个基于 Jupyter Notebook 的图形可视化工具。通过 ipysigma,用户可以在 Jupyter Notebook 中创建、编辑和展示图结构,方便进…

Vue基础面试题(二)

文章目录 1.Vue 单页应用与多页应用的区别2.Vue template 到 render 的过程3. Vue data 中某一个属性的值发生改变后,视图会立即同步执行重新渲染吗?4.Vue的优点5.vue如何监听对象或者数组某个属性的变化6.Vue模版编译原理7. 对SSR的理解8.Vue的性能优化…

现货白银实时交易平台的成长阶段 你出在哪个阶段?

很多人喜欢在现货白银平台上做模拟交易,因为他们认为现货白银实时交易平台上交易太痛苦了,不光随时会面临风险,而且还可能让自己出现大的亏损。如果投资者认为痛苦,那笔者觉得投资者不妨将在现货白银实时交易平台上做交易&#xf…

前端数据模拟Mock.js

新建mock-demo的项目,安装npm install mockjs 新建index.js //引入mockjs import Mock from mockjs //设置延迟时间 // Mock.setup({ // timeout:4000 // }) //使用mockjs模拟数据 Mock.mock(/product/search,{"ret":0,"data":{"mtim…

6年前端社招一个月上岸20K经历,附简历

面经哥只做互联网社招面试经历分享,关注我,每日推送精选面经,面试前,先找面经哥 本人普通本科6年前端经历,从年前开始准备跳槽,一开始感觉自己履历算不上突出,经历过迷茫和沮丧的时候&#xff0…

即时聊天系统

功能描述 该项目是一个前后端分离的即时聊天项目,前端采用vue2、后端使用springboot以mysql8.0作为数据库。 项目功能包含了单聊、群聊功能。在此基础上增加了对好友的功能操作,如备注设为通知、视频聊天、语音聊天、置顶、拉入黑名单、清空聊天记录等。…

小白如何入门编程?零基础入门指南,助你一步步成为编程达人!

零基础编程入门先学什么?编程语言有几百种,我们应该怎么选择。想学习编程,加入互联网行业,哪一个更有前途?在小白学习编程会有各种各样的问题,今天小编我就来为你解答。 一、程序员的类别 程序员从事的人…

Nginx部署Vue项目css文件能加载但是不生效

目录 问题描述问题解决 问题描述 Nginx部署打包后的Vue项目css文件能加载但是不生效, 问题解决 查看响应标头,发现不对劲, Content-Type: text/plain正确的应该是 Content-Type: text/css根本原因是nginx没有告诉浏览器正确的文件类型 所…

如何下载proDAD V4软件及详细安装步骤

简介: proDAD Adorage 是一款一体化的效果库,完美拥有所有的效果,集所有Adorage卷于一体,该系列包含13种可用套装中的17,000多种效果。 对于每种情况都能获得完美的效果,支持Adobe、avid、Corel、Cyberlink、MAGIX等多…

【Android】打开需要NDK的项目的一些报错的问题解决

文章简述 在打开一个新的项目的时候,遇到了一些问题,记录一下问题的解决步骤。 问题1 FAILURE: Build failed with an exception.* What went wrong: A problem occurred configuring project :app. > NDK not configured. Download it with SDK m…

redis 06 集群

1.节点,这里是把节点加到集群中的操作,跟主从结构不同 这里是在服务端使用命令: 例子: 2.启动节点 节点服务器 首先,先是服务器节点自身有一个属性来判断是不是可以使用节点功能 一般加入集群中的节点还是用r…

24K 纯干干干货:深入探讨 JavaScript 中变量相等性判断

比较两个变量是否相等,确切得说是内容是否相等,首先要划分为引用数据类型之间、基本数据类型之间和引用数据类型和基本数据类型之间(这一种使用场景比较少)这三种情形。因为引用数据类型和基本数据类型数据存储的方式是不一样的。…

AI模型究竟应该开源还是闭源?

随着人工智能技术的飞速发展,关于AI模型是否应该开源的问题引起了广泛关注。特别是最近Elon Musk对OpenAI及其领导层提起诉讼,指责其违背了开源的初心,这一争论变得更加激烈。在这篇博客中,我们将探讨开源与闭源AI模型的优缺点&am…

HTML制作一个太阳、地球、月球之间的绕转动画

大家好,今天制作一个太阳、地球、月球之间的绕转动画! 先看具体效果: 要制作一个太阳、地球、月球之间的绕转动画,我们需要结合HTML、CSS和JavaScript。由于CSS动画和JavaScript动画各有优缺点,这里我将给出一个使用…

【前端速通系列|第一篇】ES6核心语法

文章目录 1.ES6简介2.let和const3.解构4.链判断5.参数默认值6.箭头函数7.模板字符串8.Promise9.Async函数10.Await关键字11.模块化 1.ES6简介 ES6 是 ECMAScript 2015 的缩写,是 ECMAScript 语言标准的第6个版本。ECMAScript 是 JavaScript 语言的国际标准化组织制…

如何在3天内开发一个鸿蒙app

华为鸿蒙操作系统(HarmonyOS)自2.0版本正式上线以来,在短时间内就部署超过了2亿台设备,纵观全球操作系统的发展史,也是十分罕见的。与其他手机操作系统不同,HarmonyOS自诞生之日起,就是一款面向…

【vue】终端 常用代码 和其他注意

一、安装 以下全拿 qrcode.vue 举例 1. 搜版本 例子:搜 qrcode.vue的版本代码: npm view qrcode.vue versions 2.卸载 代码: npm uninstall qrcode.vue 3.安装 带版本 例子:安装 1.7.0 版本代码: npm i qrcode…

GaussDB技术解读——GaussDB架构介绍(三)

目录 9 智能关键技术方案 智能关键技术一:自治运维系统 智能关键技术二:库内AI引擎 智能关键技术三:智能优化器 10 驱动接口关键技术方案 GaussDB架构介绍(二)从数据持久化存取层(DataNode)关键技术方案、全局事…

【LeetCode 92.】 反转链表 II

1.题目 虽然本题很好拆解,但是实现起来还是有一些难度的。 2. 分析 尽可能抽象问题,然后简化代码 我在写本题的时候,遇到了下面这两个问题: 没有把[left,right] 这个区间的链表给断开,所以导致反转起来非常麻烦。…