某公司的雇员分为以下若干类

来源:互联网 发布:屏幕录制软件免费 编辑:程序博客网 时间:2024/05/16 00:45
/*2012年12月28日  某公司的雇员分为以下若干类:Employee:这是所有员工总的父类,                     属性:员工的姓名,员工的生日月份。                     方法:getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100元。SalariedEmployee:Employee的子类,拿固定工资的员工。属性:月薪HourlyEmployee:Employee的子类,按小时拿工资的员工,每月工作超出160小时的部分按照1.5倍工资发放。属性:每小时的工资、每月工作的小时数SalesEmployee:Employee的子类,销售人员,工资由月销售额和提成率决定。属性:月销售额、提成率BasedPlusSalesEmployee:SalesEmployee的子类,有固定底薪的销售人员,        工资由底薪加上销售提成部分。 属性:底薪。写一个程序,把若干各种类型的员工放在一个Employee数组里,写一个函数,打印出某月每个员工的工资数额。注意:要求把每个类都做成完全封装,不允许非私有化属性。*/public class Employee {public Employee(String name, int month){this.name = name;this.month = month;}public float get_Salary(int month){//如果月份为员工生日月份,则增加100的if (month == this.month){return 100;}else{return 0;}}private String name;   //员工姓名private int month;   //员工的生日月份public static void main(String args[]){Employee a[] = new Employee[4];a[0] = new SalariedEmployee("A", 2, 1000);a[1] = new HourlyEmployee("B", 3, 2000, 200);a[2] = new SalesEmployee("C", 4, 50000, (float) 0.1);a[3] = new BasedPlusSalesEmployee("D", 5, 50000, (float) 0.1, 1000);System.out.println("A的工资为" + a[0].get_Salary(2));System.out.println("B的工资为" + a[1].get_Salary(2));System.out.println("C的工资为" + a[2].get_Salary(2));System.out.println("D的工资为" + a[3].get_Salary(2));}}//拿固定工资的员工class SalariedEmployee extends Employee{public SalariedEmployee(String name, int month, float salary){super(name, month);this.salary = salary;}@Overridepublic float get_Salary(int month){return salary + super.get_Salary(month);  }private float salary;   //月薪}//按小时拿工资的员工class HourlyEmployee extends Employee{public HourlyEmployee(String name, int month, float salary, int hour){super(name, month);this.salary = salary;this.hour = hour;}@Overridepublic float get_Salary(int month){//大于160小时的情况if (hour > 160){return (float) (salary * 160 + (hour - 160) * salary * 1.5 + super.get_Salary(month));}else{return salary * hour + super.get_Salary(month);}}private float salary;  //每小时工资private int hour;    //每月工作的小时数}//销售人员class SalesEmployee extends Employee{public SalesEmployee(String name, int month, float sale, float bonus){super(name, month);this.sale = sale;this.bonus = bonus;}@Overridepublic float get_Salary(int month){return sale * bonus + super.get_Salary(month);}private float sale;  //销售额private float bonus;  //提成率}//有固定底薪的销售人员class BasedPlusSalesEmployee extends SalesEmployee{public BasedPlusSalesEmployee(String name, int month, float sale,float bonus, float baseSalary){super(name, month, sale, bonus);this.baseSalary = baseSalary;}@Overridepublic float get_Salary(int month){return baseSalary + super.get_Salary(month);}private float baseSalary; //底薪}/* * 问题一:main函数需要放在与文件同名的public类中,否则运行时一直启动上次的程序 * 问题二:错误: 找不到或无法加载主类Test *       原因:原先把main函数放在Test类里面,运行发现错误后又把Test类删除, * 将class文件重构一下就可以了 */