JAVA面向对象练习题,课后编程题。题目为:公司员工分为5类,每类员工都有相应的封装类。
abstract class Employee{ private int month; private String name; 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; } public double getSalary(int month){ int salary = 0; if(month==this.month) salary=salary+100; return salary; } public Employee(){ } public Employee(String name,int month){ this.month=month; this.name=name; } } class SalariedEmployee extends Employee{ private int monthSalary; public SalariedEmployee(){ } public SalariedEmployee(String name,int month,int monthSalary){ super(name,month); this.monthSalary=monthSalary; } public int getMonthSalary(){ return monthSalary; } public void setMonthSalary(int monthSalary){ this.monthSalary = monthSalary; } public double getSalary(int month){ double salary = monthSalary+super.getSalary(month); return salary; } } class HourlyEmployee extends Employee{ public double getHourlySalary() { return hourlySalary; } public void setHourlySalary(double hourlySalary) { this.hourlySalary = hourlySalary; } public int getHours() { return hours; } public void setHours(int hours) { this.hours = hours; } private double hourlySalary; private int hours; public HourlyEmployee(){ } public HourlyEmployee(String name,int month,double hourlySalary,int hours){ super(name,month); this.hourlySalary=hourlySalary; this.hours=hours; } public double getSalary(int month){ if(hours<0){ System.out.println("数据错误!!!!!"); return 0; } else if(hours<=160) return hourlySalary*hours+super.getSalary(month); else return hourlySalary*160+hourlySalary*1.5*(hours-160)+super.getSalary(month); } } class SalesEmployee extends Employee{ private double sales; private double rete; public double getSales() { return sales; } public void setSales(double sales) { this.sales = sales; } public double getRete() { return rete; } public void setRete(double rete) { this.rete = rete; } public SalesEmployee(){ } public SalesEmployee(String name,int month,double sales,double rete){ super(name,month); this.sales=sales; this.rete=rete; } @Override public double getSalary(int month) { return this.getSales()*(1+this.getRete())+super.getSalary(month); } } class BasePlusSalesEployee extends SalesEmployee{ public double getBaseSalary() { return baseSalary; } public void setBaseSalary(double baseSalary) { this.baseSalary = baseSalary; } private double baseSalary; public BasePlusSalesEployee(){ } public BasePlusSalesEployee(String name,int month,double sales,double rete,double baseSalary){ super(name,month,sales,rete); this.baseSalary=baseSalary; } public double getSalary(int month){ return baseSalary+super.getSalary(month); } } public class 一 { public static void main(String[] args) { Employee[] employees = {new SalariedEmployee("张三",1,1600),new HourlyEmployee("李 四",2,50,180),new SalesEmployee("王五",3,6500,0.15), new BasePlusSalesEployee("赵六",4,5000,0.15,2000)}; for(int i=0;i<employees.length;i++){ System.out.println(Math.round(employees[i].getSalary(5))); } } }
某公司的员工分为5类,每类员工都有相应的封装类,这5个类的信息如下
(1)Employee:这是所有员工的父类。
①属性:员工的姓名、员工的生日月份。
)方法:getSalary(int month)根据参数月份确定工资。如果该月员工过生日,则公司会额外发放100元。
(2)SalariedEmployee:Employee 的子类,拿固定工资的员工。
属性:月薪。
(3)HourlyEmployee:Employee的子类,按小时拿工资的员工,每月工作超出160h的
部分按照1.5倍工资发放。
属性:每小时的工资、每月工作的小时数。
(4)SalesEmployee:Employee的子类,销售人员,工资由月销售额和提成率决定。
属性:月销售额、提成率。
(5)BasePlusSalesEmployee:SalesEmployee的子类,有固定底薪的销售人员,工资为
底薪加上销售提成。
属性:底薪。
本题要求根据上述员工分类,编写一个程序,实现以下功能:
(1)创建一个Employee数组,分别创建若干不同的Employee对象,并打印某个月的
(2)每个类都完全封装,不允许有非私有化属性。