對於重寫和多態的一個練習回顧

 

設計一個員工系統:

           員工分爲:Sells銷售人員(編號/姓名/工資/提成);Admin管理人員(編號/姓名/工資/職務);Tech技術人員(編號,姓名,工資,顯目組);Department行政人員(編號,姓名,工資)。

          有兩種行爲:1計算年收入;2招聘員工。

對於這個題目的分析:

          首先寫一個員工類,把員工共同的屬性和方法放在員工類中。

          寫Sells,Admin,Tech,Department四個員工的子類,由於這四個子類各有自己不同的屬性和方法,需要寫一下,相同的方法,和屬性,可以從父類那裏繼承而來。

          還需要一個測試類。用main方法來測試縮寫的程序是否正確。

          通過讀題目,我們發現有一個類比較特殊,那就是銷售人員,因爲在計算其工資的時候,還需要考慮到提成的問題。對於其他所以人員,其工作的計算方式是相同的,只有銷售人員的工資計算是不一樣的。很顯然,我們可以用繼承來搞定,這裏也告訴我們銷售人員繼承過來是不合適的,因此用到了重寫。這很符合繼承和重寫這兩種技術結合的條件。所以計算年薪的方法就這樣搞定了。

         由於計算年薪是所以的員工都要計算,所以直接把計算員工的工資的方法寫在了員工類中,由於銷售人員繼承員工類,期中計算工資的方法是不合適的,需要重寫一下。這樣就搞定了計算工資的方法。

這裏還需要提到了一點就是,在子類裏寫全參構造的時候,要把其所有的屬性都寫上,(由於子類裏的所以屬性不一定都是在子類裏申明的,部分可能是在父類中就申明瞭,寫全參構造的時候,這部分屬性也要寫在子類的全參的構造中,這樣纔算是真正的全參的構造)。

public class Emp {
	private String id;
	private String name;
	private double sal;
	
	
	public Emp() {
		super();
	}
	
	public Emp(String id, String name, double sal) {
		super();
		this.id = id;
		this.name = name;
		this.sal = sal;
	}
	public double comIncome(){
		return sal*12;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public double getSal() {
		return sal;
	}
	public void setSal(double sal) {
		if(sal >= 800){
			this.sal = sal;
		}
		else{
			System.out.println("非法工資");
		}
	}
	
}
public class Sells extends Emp{
	private double d = 0.1;

	public Sells() {
		super();
		
	}
    //下面纔是全參數構造
	public Sells(String id, String name, double sal,double d) {
		super(id, name, sal);
		this.setD(d);
		
	}
        public double comIncome(){           //重寫的思想應用到了這裏了
    	        return getSal()*(1+d)*12;
        }
	public double getD() {
		return d;
	}

	public void setD(double d) {
		if(d>=0&&d<=1.0){
			this.d = d;
		}
		else{
			System.out.println("提成無效");
		}
	}

}
public class Admin extends Emp {
	private String pos;

	public Admin() {
		super();
		
	}

	public Admin(String id, String name, double sal,String pos) {
		super(id, name, sal);
		this.setPos(pos);
		
	}

	public String getPos() {
		return pos;
	}

	public void setPos(String pos) {
		this.pos = pos;
	}
	

}
public class Tech extends Emp{
	private String project;

	public Tech() {
		super();
		
	}

	public Tech(String id, String name, double sal,String project) {
		super(id, name, sal);
		this.setProject(project);	
	}
	public String getProject() {
		return project;
	}

	public void setProject(String project) {
		this.project = project;
	}
	

}
public class Department extends Emp{

	public Department() {
		super();
	}

	public Department(String id, String name, double sal) {
		super(id, name, sal);
	}

}

public class Test {//開發的時候的開閉原則     不要修改     可以擴展
	public double getIncome(Emp e){
		
		return e.comIncome();         //重寫+多態
	}
	public void addEmp(Emp e){
		System.out.println("招聘了員工"+e.getName());
	}
	public static void main(String[] args){
		
		Test t = new Test();
		Emp e1 = new Emp("007","幫得",3000);
		System.out.println(t.getIncome(e1));
		Emp e2 = new Admin("009","大內密探",5000,"泡公主");
		System.out.println(t.getIncome(e2));
		Emp e3 = new Sells("001","大力丸",3000,0.5);
		System.out.println(t.getIncome(e3));

	}
}

在這裏要感謝張立猛老師,這些都是我在遠程班上課學到的東西,拿出來整理一下,加深印象和鞏固,也希望能給其他人一些啓發。

發佈了76 篇原創文章 · 獲贊 4 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章