一、定义Employee
这是所有员工总的父类。属性:员工的姓名,员工的生日月份。方法:getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100
package cn.ds.baidu.demo11.zuoye;
/*
* 所有员工总的父类
* */
public abstract class Employee {
private String name; //员工姓名
private int month; // 员工生日月份
public abstract double salary(int month);
public Employee() {
}
public Employee(String name, int month) {
this.name = name;
this.month = month;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
}
SalariedEmployee:
Employee的子类,拿固定工资的员工。
属性:月薪
package cn.ds.baidu.demo11.zuoye;
/*
* 拿固定工资的员工
* */
public class SalariedEmployee extends Employee{
private double monthSalary; // 月薪
public SalariedEmployee(double monthSalary) {
this.monthSalary = monthSalary;
}
public SalariedEmployee(String name, int month, double monthSalary) {
super(name, month);
this.monthSalary = monthSalary;
}
public double getMonthSalary() {
return monthSalary;
}
public void setMonthSalary(double monthSalary) {
this.monthSalary = monthSalary;
}
@Override
public double salary(int month) {
double salary = this.monthSalary;
if (super.getMonth() == month){
salary += 400;
System.out.println(super.getName() + "本月过生日,奖励400元");
}
return salary;
}
}
HourlyEmployee:
Employee的子类,按小时拿工资的员工,每月工作超出160小时的部分按照1.5倍工资发放。
属性:每小时的工资、每月工作的小时数
package cn.ds.baidu.demo11.zuoye;
/*
*
* 按小时拿工资的员工,每月工作超出160小时的部分按照1.5倍工资发放
* */
public class HourlyEmployee extends Employee{
private double hourSalary; //时薪
private int hours; //工作时长
public HourlyEmployee(double hourSalary, int hours) {
this.hourSalary = hourSalary;
this.hours = hours;
}
public HourlyEmployee(String name, int month, double hourSalary, int hours) {
super(name, month);
this.hourSalary = hourSalary;
this.hours = hours;
}
public double getHourSalary() {
return hourSalary;
}
public void setHourSalary(double hourSalary) {
this.hourSalary = hourSalary;
}
public int getHours() {
return hours;
}
public void setHours(int hours) {
this.hours = hours;
}
@Override
public double salary(int month) {
double salary = 0;
//判断每月工作时长是否超过160小时
if (hours > 160){
salary = 160 * this.hourSalary + (this.hours - 160) * 1.5 * this.hourSalary;
}
//判断工作月份是否过生日
if (super.getMonth() == month){
salary += 400;
System.out.println(super.getName() + "本月过生日,奖励400元");
}
return salary;
}
}
SalesEmployee:
Employee的子类,销售人员,工资由月销售额和提成率决定。
属性:月销售额、提成率
package cn.ds.baidu.demo11.zuoye;
/*
*销售人员,工资由月销售额和提成率决定
* */
public class SalesEmployee extends Employee{
private double monthSum; //月销售额
private double upRate; //提成率
public SalesEmployee(double monthSum, double upRate) {
this.monthSum = monthSum;
this.upRate = upRate;
}
public SalesEmployee(String name, int month, double monthSum, double upRate) {
super(name, month);
this.monthSum = monthSum;
this.upRate = upRate;
}
@Override
public double salary(int month) {
double salary = this.monthSum * this.upRate;
if (super.getMonth() == month){
salary += 400;
System.out.println(super.getName() + "本月过生日,奖励400元");
}
return salary;
}
public SalesEmployee() {
}
public double getMonthSum() {
return monthSum;
}
public void setMonthSum(double monthSum) {
this.monthSum = monthSum;
}
public double getUpRate() {
return upRate;
}
public void setUpRate(double upRate) {
this.upRate = upRate;
}
}
BasePlusSalesEmployee:
SalesEmployee的子类,有固定底薪的销售人员,工资由底薪加上销售提成部分。
属性:底薪。
package cn.ds.baidu.demo11.zuoye;
/*
* 有固定底薪的销售人员,工资由底薪加上销售提成部分。
* */
public class BasePlusSalesEmployee extends SalesEmployee{
private double baseSalary;
protected double finalSalary = baseSalary + super.salary(super.getMonth());
public BasePlusSalesEmployee(double monthSum, double upRate, double baseSalary) {
super(monthSum, upRate);
this.baseSalary = baseSalary;
}
public BasePlusSalesEmployee(String name, int month, double monthSum, double upRate, double baseSalary) {
super(name, month, monthSum, upRate);
this.baseSalary = baseSalary;
}
public BasePlusSalesEmployee(double baseSalary) {
this.baseSalary = baseSalary;
}
public double getBaseSalary() {
return baseSalary;
}
public void setBaseSalary(double baseSalary) {
this.baseSalary = baseSalary;
}
}
Test类
package cn.ds.baidu.demo11.zuoye;
public class Test {
public static void main(String[] args) {
Employee[] employees =new Employee[10];
employees[0] = new SalariedEmployee("小李",6,2000);
employees[1] = new HourlyEmployee("老张",18,13.0,300);
employees[2] = new SalesEmployee("腰子",3,5000,0.6);
employees[3] = new BasePlusSalesEmployee("xin", 9,4000.2,0.5,300);
for (int i = 0; i < employees.length; i++){
if (employees[i] != null){
double salary = employees[i].salary(6);
System.out.println(employees[i].getName() + "的工资是" + salary);
}
}
}
}