公司员工工资
Employee:这是所有员工总的父类,属性:员工的姓名, 员工的生日月份。
方法:double getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,
则公司会额外奖励100元。
SalariedEmployee:Employee的子类,拿固定工资的员工。属性:月薪
HourlyEmployee:Employee的子类,按小时拿工资的员工,每月工作超出160小时的部分按照1.5倍工资发放。
属性:每小时的工资、每月工作的小时数
SalesEmployee:Employee的子类,销售人员,工资由月销售额和提成率决定。
属性:月销售额、提成率
BasePlusSalesEmployee:SalesEmployee的子类,有固定底薪的销售人员,工资由底薪加上销售提成部分。
属性:底薪。
BasePlusSalesEmployee 不允许被其他任何类继承
Employee所有员工的父类
public abstract class Employee {
private String name;
private int month;
public Employee() {
}
public Employee(String name, int month) {
this.name = name;
this.month = month;
}
protected double getSalary(int month) {
return this.month == month ? 100 : 0;
}
@Override
public String toString() {
return "Employee{" +
"name='" + name + '\'' +
", month=" + month +
'}';
}
}
SalariedEmployee拿固定工资的员工
public class SalariedEmployee extends Employee {
private double salary;
public SalariedEmployee(String name, int month, double salary) {
super(name, month);
this.salary = salary;
}
@Override
protected double getSalary(int month) {
return super.getSalary(month)+this.salary;
}
}
HourlyEmployee按小时拿工资的员工
public class HourlyEmployee extends Employee {
private double hourSalsry;
private double hour;
public HourlyEmployee(String name, int month, double hourSalsry, double hour) {
super(name, month);
this.hourSalsry = hourSalsry;
this.hour = hour;
}
@Override
protected double getSalary(int month) {
return super.getSalary(month) + (hour <= 180 ? hourSalsry * 160 : hourSalsry * (hour - 160) * 1.5 + 160 * hourSalsry);
}
}
SalesEmployee销售人员
public class SalesEmployee extends Employee {
private double monthSale;
private double rate;
public SalesEmployee(String name, int month, double monthSale, double rate) {
super(name, month);
this.monthSale = monthSale;
this.rate = rate;
}
@Override
protected double getSalary(int month) {
return super.getSalary(month)+monthSale*rate;
}
}
BasePlusSalesEmployee有固定底薪的销售人员
public class BasePlusSalesEmployee extends SalesEmployee {
private double baseSalary;
public BasePlusSalesEmployee(String name, int month, double monthSale, double rate, double baseSalary) {
super(name, month, monthSale, rate);
this.baseSalary = baseSalary;
}
@Override
protected double getSalary(int month) {
return super.getSalary(month)+baseSalary;
}
}
测试类
import java.util.Arrays;
import java.util.Comparator;
public class EmployeeTset {
public static void main(String[] args) {
Employee[] employees = new Employee[4];
employees[0] = new SalariedEmployee("小三", 6, 3000);
employees[1] = new HourlyEmployee("小五", 3, 200, 170);
employees[2] = new SalesEmployee("叶凡", 8, 1000000, 0.05);
employees[3] = new com.qikux.day11.homework2.BasePlusSalesEmployee("李白", 4, 30000, 0.05, 2000);
System.out.println(Arrays.toString(employees));
Arrays.stream(employees).forEach(a -> System.out.println(a));
printSalaryByMonth(employees, 5);
printMaxSalaryEmployee(employees, 5);
sort(employees,3);
System.out.println();
Arrays.stream(employees).forEach(a -> System.out.println(a));
}
public static void sort(Employee[] employees, int month) {
Comparator<Employee> com = (b, c) -> {
if (b.getSalary(1) > c.getSalary(1))
return 1;
if (b.getSalary(1) == c.getSalary(1))
return 0;
return -1;
};
for (int i = 0; i < employees.length; i++) {
for (int j = i + 1; j < employees.length; j++) {
if (com.compare(employees[i], employees[j]) > 0) {
Employee e = employees[i];
employees[i] = employees[j];
employees[j] = e;
}
}
}
}
/**
* 显示每个 员工 对应月份的薪资
*
* @param employees
* @param month
*/
public static void printSalaryByMonth(Employee[] employees, int month) {
for (Employee e : employees) {
System.out.println(e.getSalary(month));
}
}
/**
* 打印最高薪资的员工信息
*
* @param employees
* @param month
*/
public static void printMaxSalaryEmployee(Employee[] employees, int month) {
Employee maxSalary = employees[0];
for (int i = 1; i < employees.length; i++) {
if (maxSalary.getSalary(month) < employees[i].getSalary(month)) {
maxSalary = employees[i];
}
}
System.out.println(maxSalary);
}
}