JAVA的抽象类和终结类综合练习

一个公司通常都会存在着不同职位,而不同的职位计算工资的方法也是不相同的。工资可能是固定不变的,也可能是根据销售额或工作量来计算。

假设公司有三种职务:经理、计件工人和计时工人:他们的工资组成分别为:

经理的工资=基本工资+奖金

计件工人的工资=基本工资+产品数量*每件的报酬

计时工人的工资=基本工资+工作时间*每小时报酬

要求:

1.新建抽象类Salary,有姓名、工号、职位、工资四个属性,类中有构造方法,抽象方法earning()(作用为计算工资),非抽象方法setSalary()(修改基本工资),printSalary()方法:打印输出工号、姓名、职位及工资

2.新建终结类Boss继承Salary类,有自己的属性prize(奖金),构造方法,重写earning()方法,计算经理的工资;增加修改奖金方法set()

3.新建终结类PieceWorker继承Salary类,有自己的属性num(件数)、wagePer(每件的报酬),构造方法,重写earning()方法,计算计件制工人的工资;增加set()方法,作用为设置件数;重载set()方法,设置每件报酬。

4.新建终结类HourWorker,要求与上类似

5.新建测试类SalaryCalDemo,创建上述类的实例并初始化。通过调用set方法,修改相关数据。最终输出三种职务的工资

public abstract class Salary {
    //姓名、工号、职位、工资
    private String name;
    private String workno;
    private String work;
    private int salary;

    public Salary() {
    }

    public Salary(String name, String workno, String work, int salary) {
        this.name = name;
        this.workno = workno;
        this.work = work;
        this.salary = salary;
    }

    public abstract int earning();

    public void setSalary(int salary){
        this.salary=salary;
    }
    public int printSalary(){
        return salary;
    }
    @Override
    public String toString() {
        return "Salary{" +
                "name='" + name + '\'' +
                ", workno='" + workno + '\'' +
                ", work='" + work + '\'' +
                ", salary=" + salary +
                '}';
    }
}