(1) Employee:这是所有员工总的父类。
① 属性:员工的姓名,员工的生日月份
② 方法:getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励 100 元。
(2) SalariedEmployee:Employee 的子类,拿固定工资的员工。
① 属性:月薪。
(3)HourlyEmployee:Employee 的子类,按小时拿工资的员工,每月工作超出160 小时的部分按照1.5倍工资发放。
① 属性:每小时的工资、每月工作的小时数。
(4) SalesEmployee:Employee 的子类,销售,工资由月销售额和提成率决定。
① 属性:月销售额、提成率。
(5) BasePlusSalesEmployee:SalesEmployee 的子类,有固定底薪的销售人员,工资由底薪加上销售提成部分。
① 属性:底薪。
本题要求根据上述雇员分类,编写一个程序,实现以下功能:
(1)创建一个 Employee 数组,分别创建若干不同的 Employee 对象,并打印某个月的工资。
(2)每个类都完全封装,不允许非私有化属性
代码如下:
父类:
abstract class Employee {
private String name;
private int month;
public Employee(String name, int month) {
this.name = name;
this.month = month;
}
public String getName() {
return name;
}
public int getMonth() {
return month;
}
public void setName(String name) {
this.name = name;
}
public void setMonth(int month) {
this.month = month;
}
public double getSalary(int month) {
double salary = 0;
if (this.month == month) {
salary += 100;
}
return salary;
}
}
固定工资的员工:
class SalariedEmployee extends Employee {
private double 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;
}
public double getSalary(int month){
return monthsalary+super.getSalary(month);
}
}
按小时拿工资的员工:
public class HourlyEmployee extends Employee {private double hourlysalary;//每小时工资private double monthhourly;//每月小时数public HourlyEmployee (String name,int month,double monthhourly ,double hourlysalary ){super(name,month);this.hourlysalary =hourlysalary ;this.monthhourly =monthhourly ;}public double getHourlysalary() {return hourlysalary;}public void setHourlySalary(double hourlysalary) {this.hourlysalary = hourlysalary;}public double getMonthhourly() {return monthhourly;}public void setMonthhourly(double monthhourly) {this.monthhourly = monthhourly;}public double getSalary(int month) {double salary = 0;if (monthhourly > 160) {salary = (160 + (monthhourly - 160) * 3/2) * hourlysalary ;} else {salary = month * hourlysalary ;}return salary + super.getSalary(month);} }
销售人员:
public class SalesEmployee extends Employee {private double salasmonth;//月销售额private double commmissionrate;//提成率public SalesEmployee (String name,int month,double salasmonth ,double commmissionrate ){super(name,month);this.commmissionrate =commmissionrate ;this.salasmonth =salasmonth ;}public double getSalasmonth() {return salasmonth;}public double getCommmissionrate() {return commmissionrate;}public void setSalasmonth(double salasmonth) {this.salasmonth = salasmonth;}public void setCommmissionrate(double commmissionrate) {this.commmissionrate = commmissionrate;}@Overridepublic double getSalary(int month) {return commmissionrate *salasmonth +super.getSalary(month);} }
固定底薪的销售员(销售人员的子类):
public class BasePlusSalesEmployee extends SalesEmployee {private double basesalary;//底薪public BasePlusSalesEmployee (String name,int month,double basesalary,double salasmonth ,double commmissionrate ){super(name,month,salasmonth ,commmissionrate );this.basesalary =basesalary ;}public double getBasesalary() {return basesalary;}public void setBasesalary(double basesalary) {this.basesalary = basesalary;}@Overridepublic double getSalary(int month) {return basesalary +super .getSalary(month);} }
测试类:
public class Texe {public static void main(String[] args) {Employee stu[]={new SalariedEmployee("李四",7,5000),new HourlyEmployee("张三",8,20,260),new SalesEmployee("王二",7,8000,0.2),new BasePlusSalesEmployee("赵六",9,2000,6000,0.1)};System .out .println("七月份工资:");for(int i=0;i< stu.length ;i++){System .out.println("姓名:"+stu[i].getName()+" 生日月份:"+stu[i].getMonth()+" 工资为:"+ stu[i].getSalary(7));}}
调试结果图: