您的位置:首页 > 其它

对于重写和多态的一个练习回顾

2011-12-31 09:44 357 查看
设计一个员工系统:

员工分为: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));

}
}

在这里要感谢张立猛老师,这些都是我在远程班上课学到的东西,拿出来整理一下,加深印象和巩固,也希望能给其他人一些启发。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐