java實現多態在工資系統中的應用:給出一個根據僱員類型,利用多態性完成工資單計算的程序。

要求: 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();
		}
		
		
	}
	

}

運行結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章