抽象类与抽象方法(或abstract关键字)练习题

练习一 

编写工资系统,实现不同类型员工(多态)的按月发放工资。如果当月出现某个Employee对象的生日,则将该雇员的工资增加100元。实验说明:(1)定义一个Employee类,该类包含:private成员变量name,number,birthday,其中birthday 为MyDate类的对象;
提供必要的构造器;
abstract方法earnings(),返回工资数额;
toString()方法输出对象的name,number和birthday。(2)MyDate类包含:
private成员变量year,month,day;
提供必要的构造器;
toDateString()方法返回日期对应的字符串:xxxx年xx月xx日(3)定义SalariedEmployee类继承Employee类,实现按月计算工资的员工处理。
该类包括:private成员变量monthlySalary;
提供必要的构造器;
实现父类的抽象方法earnings(),该方法返回monthlySalary值;
toString()方法输出员工类型信息及员工的name,number,birthday。比如:SalariedEmployee[name = '',number = ,birthday=xxxx年xx月xx日](4)参照SalariedEmployee类定义HourlyEmployee类,实现按小时计算工资的员工处理。该类包括:
private成员变量wage和hour;
提供必要的构造器;
实现父类的抽象方法earnings(),该方法返回wage*hour值;
toString()方法输出员工类型信息及员工的name,number,birthday。(5)定义PayrollSystem类,创建Employee变量数组并初始化,该数组存放各类雇员对象的引用。
利用循环结构遍历数组元素,输出各个对象的类型,name,number,birthday,以及该对象生日。
当键盘输入本月月份值时,如果本月是某个Employee对象的生日,还要输出增加工资信息。//提示:
//定义People类型的数组People c1[]=new People[10];
//数组元素赋值
c1[0]=new People("John","0001",20);
c1[1]=new People("Bob","0002",19);
//若People有两个子类Student和Officer,则数组元素赋值时,可以使父类类型的数组元素指向子类。
c1[0]=new Student("John","0001",20,85.0);
c1[1]=new Officer("Bob","0002",19,90.5);
package chapter08_oop3.src.com.atguigu07._abstract.exer2;/*** ClassName: Employee* Package: chapter08_oop3.src.com.atguigu07._abstract.exer2* Description:** (1)定义一个Employee类,该类包含:** private成员变量name,number,birthday,其中birthday 为MyDate类的对象;* 提供必要的构造器;* abstract方法earnings(),返回工资数额;* toString()方法输出对象的name,number和birthday。** @Author 小白* @Create 2024/4/4 12:48* @Version 1.0*/
public  abstract class Employee {private String name;private int number;private MyDate birthday;public Employee() {}public Employee(String name, int number, MyDate birthday) {this.name = name;this.number = number;this.birthday = birthday;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getNumber() {return number;}public void setNumber(int number) {this.number = number;}public MyDate getBirthday() {return birthday;}public void setBirthday(MyDate birthday) {this.birthday = birthday;}public  abstract  double earnings();public String toString(){return "name = " + name + ",number = " + number +", birthday = " + birthday.toDateString();}}

package chapter08_oop3.src.com.atguigu07._abstract.exer2;import chapter08_oop3_teacher.src.com.atguigu07._abstract.exer2.Employee;
import chapter08_oop3_teacher.src.com.atguigu07._abstract.exer2.MyDate;/*** ClassName: HourlyEmployee* Description:*      参照SalariedEmployee类定义HourlyEmployee类,实现按小时计算工资的员工处理。该类包括:*      private成员变量wage和hour;*      提供必要的构造器;*      实现父类的抽象方法earnings(),该方法返回wage*hour值;*      toString()方法输出员工类型信息及员工的name,number,birthday。* @Author 尚硅谷-宋红康* @Create 15:45* @Version 1.0*/
public class HourlyEmployee extends Employee {private double wage;//单位小时的工资private int hour;//月工作的小时数public HourlyEmployee() {}public HourlyEmployee(String name, int number, MyDate birthday, double wage, int hour) {super(name, number, birthday);this.wage = wage;this.hour = hour;}public double getWage() {return wage;}public void setWage(double wage) {this.wage = wage;}public int getHour() {return hour;}public void setHour(int hour) {this.hour = hour;}@Overridepublic double earnings() {return wage * hour;}public String toString(){return "HourlyEmployee[" + super.toString() + "]";}
}

package chapter08_oop3.src.com.atguigu07._abstract.exer2;/*** ClassName: MyDate* Package: chapter08_oop3.src.com.atguigu07._abstract.exer2* Description:** (2)MyDate类包含:* private成员变量year,month,day;* 提供必要的构造器;* toDateString()方法返回日期对应的字符串:xxxx年xx月xx日** @Author 小白* @Create 2024/4/4 12:49* @Version 1.0*/
public class MyDate {private  int year;private int month;private int day;public MyDate() {}public MyDate(int year, int month, int day) {this.year = year;this.month = month;this.day = day;}public int getYear() {return year;}public void setYear(int year) {this.year = year;}public int getMonth() {return month;}public void setMonth(int month) {this.month = month;}public int getDay() {return day;}public void setDay(int day) {this.day = day;}public String toDateString() {return year +"年" +month +"月" + day + "日";}
}

package chapter08_oop3.src.com.atguigu07._abstract.exer2;import chapter08_oop3_teacher.src.com.atguigu07._abstract.exer2.Employee;
import chapter08_oop3_teacher.src.com.atguigu07._abstract.exer2.HourlyEmployee;
import chapter08_oop3_teacher.src.com.atguigu07._abstract.exer2.MyDate;
import chapter08_oop3_teacher.src.com.atguigu07._abstract.exer2.SalariedEmployee;import java.util.Scanner;/*** ClassName: PayrollSystem* Description:*      定义PayrollSystem类,创建Employee变量数组并初始化,该数组存放各类雇员对象的引用。*      利用循环结构遍历数组元素,输出各个对象的类型,name,number,birthday。*      当键盘输入本月月份值时,如果本月是某个Employee对象的生日,还要输出增加工资信息。** @Author 尚硅谷-宋红康* @Create 15:47* @Version 1.0*/
public class PayrollSystem {public static void main(String[] args) {Scanner scan = new Scanner(System.in);chapter08_oop3_teacher.src.com.atguigu07._abstract.exer2.Employee[] emps = new Employee[2];emps[0] = new SalariedEmployee("张小亮",1001,new chapter08_oop3_teacher.src.com.atguigu07._abstract.exer2.MyDate(1992,12,21),18000);emps[1] = new HourlyEmployee("侯少鹏",1002,new MyDate(1997,11,12),240,100);System.out.println("请输入当前的月份:");int month = scan.nextInt();for (int i = 0; i < emps.length; i++) {System.out.println(emps[i].toString());System.out.println("工资为:" + emps[i].earnings());if(month == emps[i].getBirthday().getMonth()){System.out.println("生日快乐!加薪100");}}scan.close();}
}
package chapter08_oop3.src.com.atguigu07._abstract.exer2;/*** ClassName: SalariedEmployee* Package: chapter08_oop3.src.com.atguigu07._abstract.exer2* Description:** (3)定义SalariedEmployee类继承Employee类,实现按月计算工资的员工处理。* 该类包括:private成员变量monthlySalary;* 提供必要的构造器;* 实现父类的抽象方法earnings(),该方法返回monthlySalary值;* toString()方法输出员工类型信息及员工的name,number,birthday。比如:SalariedEmployee[name = '',number = ,birthday=xxxx年xx月xx日]** @Author 小白* @Create 2024/4/4 13:19* @Version 1.0*/
public class SalariedEmployee  extends  Employee{private double  monthlySalary;  //月工资public SalariedEmployee() {}@Overridepublic double earnings() {return monthlySalary;}public SalariedEmployee(String name, int number, MyDate birthday, double monthlySalary) {super(name, number, birthday);this.monthlySalary = monthlySalary;}//    public double getMonthlySalary() {
//        return monthlySalary;
//    }public void setMonthlySalary(double monthlySalary) {this.monthlySalary = monthlySalary;}public String toString(){return "SalariedEmployee[" + super.toString() + "]";}
}

 

 

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

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

相关文章

NOSQL(非关系型数据库)的优缺点有哪些?

优点&#xff1a; 高度灵活且可扩展&#xff1a;NoSQL数据库不受固定数据模型的限制&#xff0c;可以根据应用需求灵活设计数据结构&#xff0c;轻松应对大规模数据集。此外&#xff0c;它支持分布式架构&#xff0c;具有出色的水平扩展能力&#xff0c;能够高效地处理大量数据…

C语言中的数组与函数指针:深入解析与应用

文章目录 一、引言二、数组的定义1、数组的定义与初始化2、char*与char[]的区别1. 存储与表示2. 修改内容3. 作为函数参数 三、字符串指针数组1. 定义与概念2. 使用示例3. 内存管理 四、从字符串指针数组到函数指针的过渡1、字符串指针数组的应用场景2、函数指针的基本概念3、如…

【管理咨询宝藏48】AA银行信息科技提升分析报告

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏48】AA银行信息科技提升分析报告 【格式】PPT版本&#xff0c;可编辑 【关键词】战略规划、商业分析、管理咨询 【强烈推荐】这是一套市面上非常…

Vue 中的修饰符

Vue 中的修饰符是一种特殊的后缀&#xff0c;用于改变指令的行为。它们主要可以分为以下几种类型&#xff1a; 事件修饰符&#xff1a;用于监听 DOM 事件时的修饰符。常见的事件修饰符包括 .stop&#xff08;阻止事件继续传播&#xff09;、.prevent&#xff08;阻止事件的默认…

【代码篇】事件监听函数的内存泄漏,都给我退散吧!

前言 内存泄漏是个很严肃的问题&#xff0c;可是迄今也没有一个非常有效的排查方案&#xff0c;本方案就是针对性的单点突破。 工作中&#xff0c;我们会对window, DOM节点&#xff0c;WebSoket, 或者单纯的事件中心等注册事件监听函数, 添加了&#xff0c;没有移除&#xff…

count(“0“),split() ,sys.stdin.readline() ,matrix.append, input().strip()

目录 count() 方法主要用于计算一个序列(例如列表、元组或字符串)中某个元素出现的次数

开源软件技术社区方案

开源软件技术社区是一个由开发者、贡献者、用户和维护者组成的共享平台&#xff0c;主要目的是打造技术、软件产品良性互动、开源技术安全可控的软件生态环境&#xff0c;实现可复用应用或服务的快速部署与使用、完成资源与能力的高度共享、促进社区成员的共建共赢&#xff0c;…

提高机器人系统稳定性:引入阻尼作为共振后的相位超前

在机器人关节中&#xff0c;引入阻尼作为共振后的相位超前&#xff0c;确实是一种提高系统稳定性的有效策略。机器人关节的振动和共振是影响其性能稳定性的关键因素&#xff0c;特别是在进行高速、高精度操作时。阻尼的引入能够显著减少这些不利因素&#xff0c;提升机器人的整…

c语言--枚举类型(声明、使用、优点)

目录 一、枚举类型的声明二、 枚举类型的优点三、 枚举类型的使用 一、枚举类型的声明 枚举顾名思义就是一一列举。 把可能的取值⼀⼀列举。 比如我们现实生活中&#xff1a; ⼀周的星期⼀到星期日是有限的7天&#xff0c;可以⼀⼀列举 性别有&#xff1a;男、女、保密&#x…

渐进式图片解决前端在页面中使用大图,图片体积过大导致页面出现白屏现象

1、演示 可以看到&#xff0c;图片还在拼命加载的时候&#xff0c; 页面上就已经有内容了 2、什么渐进式图片 图片一开始是模糊的&#xff0c;然后逐渐的开始变的清晰。如果页面上有一些大图&#xff0c;如果直接扔给浏览器的话那么图片的传输时间就会比较长&#xff0c;用户就…

软考高级架构师:校验码概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

【STM32】ST-LINK 下载时遇到的问题

如果出现“ST-Link USB communication error”ST-Link USB通信错误&#xff0c;则需要启动STM32 ST-LINK Utility&#xff0c;点击【ST-LINK】->【Firmaware】更新固件&#xff0c;然后打开Kei&#xff0c;点击魔术棒->->Debug->Settings&#xff0c;开到出现类似“…

电磁兼容故障整改-静电放电抗扰度不合格

电磁兼容故障整改-静电放电抗扰度不合格 ESD干扰机理不合格的主要原因 静电放电对设备的影响有下面几种安装滤波器也对静电放电有所帮助通过良好的搭接与接地防止ESD ESD干扰机理 ESD干扰电流其实是一种共模电流&#xff0c;因为ESD电压总是以参考接地板为基准的。如空击穿放电…

JavaScript变量作用域与解构赋值

在JavaScript中&#xff0c;用var申明的变量实际上是有作用域的。如果一个变量在函数体内部申明&#xff0c;则该变量的作用域为整个函数体&#xff0c;在函数体外不可引用该变量&#xff1a; ‘use strict’; function foo() { var x 1; x x 1; } x x 2; // ReferenceErr…

基于chatGLM在llama index上建立Text2SQL

基于chatGLM在llama index上建立Text2SQL 文中使用了chatglm的llm和embedding modle,利用的智谱的免费token Text2SQL Text2SQL其实就是从文本到SQL,也是NLP中的一种实践,这可以降低用户和数据库交互的门槛,无需懂SQL就可以拿到数据库数据。Text2SQL实现了从自然语言到SQL…

什么是中间人攻击?

中间人攻击&#xff08;Man-in-the-Middle Attack&#xff0c;简称MITM攻击&#xff09;是一种常见的网络安全威胁&#xff0c;攻击者在通信双方之间秘密拦截和转发消息&#xff0c;使双方误以为他们正在直接通信。这种攻击方式可以让攻击者监听、篡改通信内容&#xff0c;甚至…

Vue Mixin混入如何使用?三种方式【plugin插件、全局、局部】

插件写法&#xff1a; 1. 创建一个commonMixin.js文件 2. 文件导出对象 export default {install (Vue) {Vue.mixin({created() {console.log(commonMixin)},methods: {},computed: {}})} }3. 在main.js中引入 import commonMixin from ./common/commonMixin.js Vue.use(commo…

从redux的基本概念渐进式理解redux/toolkit的用法

概念 Redux toolkit是帮助提高redux开发效率的一个库 React-redux 是将React和Redux toolkit绑定在一起的一个库 action 是一个对象,里面有一个type属性 action creator是一个函数,这个函数可以返回上面的action对象。 reducer 是一个函数,接受两个参数(initilastate, acti…

微软邮箱被锁住,该如何解除限制?

ChatGPT账号是微软邮箱注册的&#xff0c;我们在登陆微软邮箱时&#xff0c;http://www.outlook.com&#xff0c;不需要开魔法工具&#xff0c;直接就可以登陆&#xff0c;否则会出现安全验证&#xff0c;限制登陆。 那么如果账号被锁&#xff0c;我们该如何解除限制呢&#x…

mongoDB 优化(2)索引

执行计划 语法&#xff1a; db.collection_xxx_t.find({"param":"xxxxxxx"}).explain(executionStats) 感觉这篇文章写得很好&#xff0c;可以参考 MongoDB——索引&#xff08;单索引&#xff0c;复合索引&#xff0c;索引创建、使用&#xff09;_mongo …