600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 用抽象类简单实现一个发工资系统

用抽象类简单实现一个发工资系统

时间:2021-05-05 23:43:16

相关推荐

用抽象类简单实现一个发工资系统

首先,创建5个类:

Employee:员工类,其中有earnings()抽象方法

HourlyEmployee:按每小时来计算工资(不固定工资)

SalariedEmployee:按月份来计算工资(固定工资)

MyDate:员工出生日期类

PayrollSystem:测试类

需求:

编写工资系统,实现不同类型员工(多态)的按月发放工资。如果当月是Employee对象的生日所在月份,则将该雇员的工资增加100元。

代码实现:

//员工类public abstract class Employee {private String name;private int number;private MyDate birthday;public abstract double earnings();@Overridepublic String toString() {return "name='" + name + '\'' +", number=" + number +", 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 Employee(String name, int number, MyDate birthday) {this.name = name;this.number = number;this.birthday = birthday;}}/*---------------------------------------------------------*///出生日期类public class MyDate {private int year;private int month;private int day;@Overridepublic String toString() {return year+"年"+month+"月"+day+"日";}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 class HourlyEmployee extends Employee{//每小时的工资private int wage;//月工作的小时数private int hour;//额外的工资费用:如生日所在月份发工资奖励的100元private double extraSalary;public HourlyEmployee(String name, int number, MyDate birthday) {super(name, number, birthday);}public HourlyEmployee(String name, int number, MyDate birthday,int wage,int hour) {super(name, number, birthday);this.wage=wage;this.hour=hour;}public int getWage() {return wage;}public void setWage(int wage) {this.wage = wage;}public int getHour() {return hour;}public void setHour(int hour) {this.hour = hour;}public double getextraSalary() {return extraSalary;}public void setextraSalary(double extraSalary) {this.extraSalary = extraSalary;}@Override//总工资为工作小时数*每小时工资+额外的奖金public double earnings() {return wage*hour+extraSalary;}@Overridepublic String toString() {return super.toString();}}/*---------------------------------------------------------*////按月份来计算工资public class SalariedEmployee extends Employee{//月工资private double monthlySalary;public SalariedEmployee(String name, int number, MyDate birthday) {super(name, number, birthday);}public SalariedEmployee(String name, int number, MyDate birthday,double monthlySalary) {super(name, number, birthday);this.monthlySalary=monthlySalary;}@Overridepublic double earnings() {return monthlySalary;}@Overridepublic String toString() {return super.toString();}public double getMonthlySalary() {return monthlySalary;}public void setMonthlySalary(double monthlySalary) {this.monthlySalary = monthlySalary;}}/*---------------------------------------------------------*/import java.util.ArrayList;import java.util.Calendar;import java.util.Iterator;//测试类public class PayrollSystem {public static void main(String[] args) {//获取当前月份,便于下面比较月份Calendar calendar = Calendar.getInstance();int month = calendar.get(Calendar.MONTH);//用列表来实现存储员工对象,因为不知道员工的具体数量,不适合用对象数组来实现ArrayList list = new ArrayList();/*有两组方式构造员工类,随意选择一种:按月份分(固定)还是按工作小时分(不固定),所以这种不确定的情况就适合用抽象方法来实现*/list.add(new SalariedEmployee("Mike",1001,new MyDate(1999,8,1),10000));list.add(new HourlyEmployee("Jay",1002,new MyDate(2000,8,1),60,240));Iterator iterator = list.iterator();//遍历列表while(iterator.hasNext()){Employee employee = (Employee)iterator.next();System.out.println(employee);double salary = employee.earnings();if((month+1)==employee.getBirthday().getMonth()){if(employee instanceof SalariedEmployee){//强制转换并修改工资((SalariedEmployee)employee).setMonthlySalary(salary+100);salary+=100;}if(employee instanceof HourlyEmployee){//强制转换并修改工资,setextraSalary是修改额外工资并加入总工资((HourlyEmployee)employee).setextraSalary(100);salary+=100;}//如果发工资的月份刚好是员工的出生日期就再加100元工资System.out.println("生日快乐,奖励100元!");}System.out.println("月工资为:"+salary);}}}控制台输出结果为:name='Mike', number=1001, birthday=1999年8月1日生日快乐,奖励100元!月工资为:10100.0name='Jay', number=1002, birthday=2000年8月1日现有工资为:14500.0生日快乐,奖励100元!月工资为:14500.0

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。