封装,抽象类,继承,重写java编程题
问题描述
某公司的雇员分为以下若干类: Employee:这是所有员工总的父类,属性:员工的姓名,员工的生日月份。
方法:getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100元。
SalariedEmployee:Employee的子类,拿固定工资的员工。 属性:月薪
HourlyEmployee:Employee的子类,按小时拿工资的员工,每月工作超出160小时的部分按照1.5倍工资发放。
属性:每小时的工资、每月工作的小时数
SalesEmployee:Employee的子类,销售人员,工资由月销售额和提成率决定。 属性:月销售额、提成率
BasePlusSalesEmployee:SalesEmployee的子类,有固定底薪的销售人员,工资由底薪加上销售提成部分。 属性:底薪。
写一个程序,把若干各种类型的员工放在一个Employee数组里,写一个方法,打印出某月每个员工的工资数额。
注意:要求把每个类都做成完全封装,不允许非私有化属性。
问题java代码
import java.util.Scanner;
public abstract class Employee {
private String name;
private int birthdayMonth;
public Employee() {
super();
}
public Employee(String name, int birthdayMonth) {
super();
this.name = name;
this.birthdayMonth = birthdayMonth;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getBirthdayMonth() {
return birthdayMonth;
}
public void setBirthdayMonth(int birthdayMonth) {
this.birthdayMonth = birthdayMonth;
}
public abstract double getSalary(int month);
}
class SalariedEmployee extends Employee {
private double monthSalary;
public SalariedEmployee() {
super();
}
public SalariedEmployee(String name, int birthdayMonth, double monthSalary) {
super(name, birthdayMonth);
this.monthSalary = monthSalary;
}
public double getMonthSalary() {
return monthSalary;
}
public void setMonthSalary(double monthSalary) {
this.monthSalary = monthSalary;
}
@Override
public double getSalary(int month) {
if (month == getBirthdayMonth()) {
monthSalary = monthSalary + 100;
} else {
}
double salary = monthSalary;
return salary;
}
}
class SalesEmployee extends Employee {
private double saleroom;// 销售额
private double rate;// 提成率
public SalesEmployee() {
super();
}
public SalesEmployee(String name, int birthdayMonth, double saleroom, double rate) {
super(name, birthdayMonth);
this.saleroom = saleroom;
this.rate = rate;
}
public double getSaleroom() {
return saleroom;
}
public void setSaleroom(double saleroom) {
this.saleroom = saleroom;
}
public double getRate() {
return rate;
}
public void setRate(double rate) {
this.rate = rate;
}
@Override
public double getSalary(int month) {
double salary;
if (month == getBirthdayMonth()) {
salary = (saleroom * rate) + 100;
} else {
salary = (saleroom * rate);
}
return salary;
}
}
class BasePlusSalesEmployee extends SalesEmployee {
private double basicSalary;
public BasePlusSalesEmployee() {
super();
}
public BasePlusSalesEmployee(String name, int birthdayMonth, double saleroom, double rate, double basicSalary) {
super(name, birthdayMonth, saleroom, rate);
this.basicSalary = basicSalary;
}
public double getBasicSalary() {
return basicSalary;
}
public void setBasicSalary(double basicSalary) {
this.basicSalary = basicSalary;
}
@Override
public double getSalary(int month) {
double salary = getSaleroom() * getRate() + basicSalary;
if (month == getBirthdayMonth()) {
salary += 100;
} else {
}
return salary;
}
}
class HourlyEmployee extends Employee {
private double salaryHour;//每小时工资
private double mountHour;//一个月的工作小时数
public HourlyEmployee() {
}
public HourlyEmployee(String name, int birthdayMonth, double salaryHour, double mountHour) {
super(name, birthdayMonth);
this.salaryHour = salaryHour;
this.mountHour = mountHour;
}
public double getSalaryHour() {
return salaryHour;
}
public void setSalaryHour(double salaryHour) {
this.salaryHour = salaryHour;
}
public double getMountHour() {
return mountHour;
}
public void setMountHour(double mountHour) {
this.mountHour = mountHour;
}
@Override
public double getSalary(int month) {
double salary;
if (mountHour <= 160) {
salary = salaryHour * mountHour;
} else {
salary = (mountHour - 160) * salaryHour * 1.5 + mountHour * salaryHour;
}
return salary;
}
}
class Test {
public static void main(String[] args) {
Employee[] em = new Employee[4];
em[0] = new SalariedEmployee("王3", 8, 5000);
em[1] = new SalesEmployee("李4", 11, 1000, 0.2);
em[2] = new HourlyEmployee("杨5", 9, 20, 400);
em[3] = new BasePlusSalesEmployee("张6", 7, 6000, 0.2, 3000);
Scanner sc = new Scanner(System.in);
System.out.println("请输入当前月份: ");
int mouth = sc.nextInt();
for (int i = 0; i < 4; i++) {
System.out.print("姓名 : " + em[i].getName() + ",生日月份: " + em[i].getBirthdayMonth()
+ ", 本月工资: " + em[i].getSalary(mouth) + "\n");
}
}
}