java抽象类的运用案例-计算公司每年支付工资的总额

题目描述

定义一个表示职员的抽象类Employee,包括一个返回工资的抽象方法public abstract double earnings();

职员分为年薪(36000元/年)、月薪(10000元/月)、周薪(2000元/周)三种类型。分别定义这种类型的职员类,实现抽象类Employee。

定义一个公司类Company,该公司封装有一个职员数组Employee[],以及计算公司每年支付工资总额的salariesPay()方法。

假设该公司职员数组Employee[]中,序号为3的倍数的员工为周薪工人,序号为3的倍数余1的员工为月薪工人,其余为年薪工人。

在Example2_2类的主方法中,建立一个公司对象,并计算该公司每年支付工资总额。

源代码

抽象类Employee:

public abstract class Employee {
    public abstract double earnings();
}

年薪职员类:

public class YearWorker extends Employee {
    private static final double SALARY_PER_YEAR = 36000.0;

    @Override
    public double earnings() {
        return SALARY_PER_YEAR;
    }
}

月薪职员类:

public class MonthWorker extends Employee {
    private static final double SALARY_PER_MONTH = 10000.0;

    @Override
    public double earnings() {
        return SALARY_PER_MONTH * 12;
    }
}

周薪职员类:

public class WeekWorker extends Employee {
    private static final double SALARY_PER_WEEK = 2000.0;

    @Override
    public double earnings() {
        return SALARY_PER_WEEK * 52;
    }
}

公司类:

public class Company {
    private Employee[] employees;

    public Company(int numEmployees) {
        employees = new Employee[numEmployees];
        for (int i = 0; i < numEmployees; i++) {
            if ((i + 1) % 3 == 0) {
                employees[i] = new WeekWorker();
            } else if ((i + 1) % 3 == 1) {
                employees[i] = new MonthWorker();
            } else {
                employees[i] = new YearWorker();
            }
        }
    }

    public double salariesPay() {
        double totalSalaries = 0;
        for (Employee e : employees) {
            totalSalaries += e.earnings();
        }
        return totalSalaries;
    }
}

在主方法中,创建一个公司对象,并计算该公司每年支付工资总额:

public class Example2_2 {
    public static void main(String[] args) {
        Company company = new Company(30);
        double totalSalaries = company.salariesPay();
        System.out.println("该公司每年支付工资总额为:" + totalSalaries + "元。");
    }
}

这个程序的核心是抽象类Employee,其中定义了一个抽象方法earnings(),用于返回每种职员类型的工资。

年薪、月薪、周薪职员类分别继承自Employee,并实现了earnings()方法,根据不同的职员类型计算出相应的工资。

公司类Company封装了一个职员数组Employee[],以及计算公司每年支付工资总额的salariesPay()方法。在构造函数中,根据职员序号的不同,创建不同类型的职员对象,并将它们存储到数组中。在计算工资总额时,遍历数组中的所有职员对象,并调用它们各自的earnings()方法来计算工资。最后返回总工资。

在主方法中,创建一个公司对象,传入职员数量作为参数,然后调用公司对象的salariesPay()方法,得到该公司每年支付工资总额,并输出结果。

© 版权声明
THE END
喜欢就支持一下吧
点赞13赞赏 分享