設計一個員工系統:
員工分爲: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));
}
}
在這裏要感謝張立猛老師,這些都是我在遠程班上課學到的東西,拿出來整理一下,加深印象和鞏固,也希望能給其他人一些啓發。