要求: Employee是抽象类,Employee的子类有Boss(每星期发给他固定工资,而不计工作时间)、CommissionWorker(除基本工资外还根据销售额发放浮动工资)、PieceWorker(按其生产的产品数发放工资)、HourlyWorker(根据工作时间长短发放工资)。该例的Employee的每个子类都声明为final,因为不需要再继承它们生成子类。在主测试类Test中测试各类雇员工资计算结果。
提示: 对所有雇员类型都使用earnings()方法,但每个人挣的工资按他所属的雇员类计算,所有雇员类都继承自父类Employee。在父类中声明earnings()为抽象方法,并且对于每个子类都提供恰当的earnings()的实现方法。为了计算雇员的工资,程序仅仅使用雇员对象的一个父类引用并调用earnings()方法。在一个实际的工资系统中,各种Employee对象的引用可以通过一个Employee引用数组来实现。程序依次使用数组的每个元素(Employee引用)调用每个对象的earnings()方法。
package test;
abstract class Employee{
private String firstName;
private String lastName;
public Employee() {}
public Employee(String first,String last) {
firstName=first;
lastName=last;
}
public String getEmployeeName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public String toString() {
return firstName+lastName;
}
public void show() {};
public abstract double earnings();
}
final class Boss extends Employee{
private double 固定工资;
public Boss(String first,String last,double 固定工资) {
super(first,last);
this.固定工资=固定工资;
}
public double earnings() {
return 固定工资;
}
public void show() {
System.out.println(super.toString()+" "+earnings());
}
}
final class CommissionWorker extends Employee{
private double 基本工资;
private double 浮动工资;
public CommissionWorker(String first,String last,double 基本工资,double 浮动工资) {
super(first,last);
this.基本工资=基本工资;
this.浮动工资=浮动工资;
}
public double earnings() {
return 基本工资+浮动工资;
}
public void show() {
System.out.println(super.toString()+" "+earnings());
}
}
final class PieceWorker extends Employee{
private double 产品数;
private double 价格;
public PieceWorker(String first,String last,double 产品数,double 价格) {
super(first,last);
this.产品数=产品数;
this.价格=价格;
}
public double earnings() {
return 产品数*价格;
}
public void show() {
System.out.println(super.toString()+" "+earnings());
}
}
final class HourlyWorker extends Employee{
private double hour;
private double 价格;
public HourlyWorker(String first,String last,double hour,double 价格) {
super(first,last);
this.hour=hour;
this.价格=价格;
}
public double earnings() {
return hour*价格;
}
public void show() {
System.out.println(super.toString()+" "+earnings());
}
}
public class Test1 {
public static void main(String args[]) {
Employee em[]= new Employee[4];
Boss zt1 =new Boss("zeng","tao",1000);
CommissionWorker zt2= new CommissionWorker("li","hua",23,23);
PieceWorker zt3 =new PieceWorker("zeng","lang",23,23);
HourlyWorker zt4=new HourlyWorker("zeng","bo",23,34);
em[0]=zt1;
em[1]=zt2;
em[2]=zt3;
em[3]=zt4;
for(int i=0;i<em.length;i++)
{
em[i].show();
}
}
}
运行结果: