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

来源:互联网 发布:网页js幻灯片代码 编辑:程序博客网 时间:2024/06/07 02:59
 

设计一个员工系统:

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

在这里要感谢张立猛老师,这些都是我在远程班上课学到的东西,拿出来整理一下,加深印象和巩固,也希望能给其他人一些启发。

原创粉丝点击