要求: 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();
}
}
}
運行結果: