【Java】编写一个测试类,假设某公司共有10名员工,两种类型的员工各为5人(其中数组下标为奇数的员工为MonthWorker,其他为YearWorker),计算并输出该公司一年需要支付的薪水总额。

题目要求:编写一个Java程序:

(1)设计一个abstract类Employee,其中有一个abstract方法earnings();

(2)设计Employee的二个子类YearWorker和MonthWorker,分别对应按年领取薪水(年薪为100000元)、按月领取薪水(月薪为5000元),子类必须重写父类的earnings()方法;

(3)设计一个Company类,该类用Employee对象数组作为成员,Employee对象数组中的元素可以是YearWorker对象或MonthWorker对象的上转型对象;

(4)编写一个测试类,假设某公司共有10名员工,两种类型的员工各为5人(其中数组下标为奇数的员工为MonthWorker,其他为YearWorker),计算并输出该公司一年需要支付的薪水总额。

实现效果视频:【Java】类继承机制(实验 上转型对象)_哔哩哔哩_bilibili

思路构建:1.先定义抽象类Employee,里面只声明一个抽象方法earnings。

2.接着定义两个子类YearWorker和MonthWorker,里面分别加入构造函数,并重定义earnings方法。

3.设计Company类,类内定义一个Employee对象数组和一个i,i用来定位对象数组的元素位置,接着写构造函数,然后定义一个int类型的getMoney函数,返回第i个对象数组元素的earnings值。

4.定义测试类,先创建一个长度为10的Employee对象数组,然后用for循环分出奇偶数,将对应的earnings加入总数sum,最后打印出sum值。

抽象类Employee以及抽象方法earnings定义代码如下:

package ex4;

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

两个子类YearWorker和MonthWorker代码如下:

package ex4;

public class MonthWorker extends Employee{
    int month;
    MonthWorker(int month){
        this.month = month;
    }
    public int earnings(){
        return 5000*month;
    }
}
package ex4;

public class YearWorker extends Employee{
    int year;
    YearWorker(int year){
        this.year = year;
    }
    public int earnings(){
        return 100000*year;
    }
}

在YearWorker和MonthWorker类中,分别定义了月数和年数,接着编写构造函数,接受传来的参数year和month,最后重定义earnings方法,返回月薪x月数,年薪x年数。

Company类代码如下:

package ex4;

public class Company {
    Employee[] e;
    int i;
    Company(Employee[] ex,int i){
        this.e = ex;
        this.i = i;
    }
    public int getMoney(){
        return e[i].earnings();
    }
}

用i来定位Employee对象数组的下标,接着定义getMoney()方法,返回对应数组的薪水。

测试类test代码如下:

package ex4;

public class test {
    public static void main(String[] args) {
        Employee[] em = new Employee[10];
        Company com;
        int i,sum=0;
        for(i=0;i<10;i++){
            if(i%2==0){
                em[i] = new YearWorker(1);
            }
            else {
                em[i] = new MonthWorker(12);
            }
            com = new Company(em,i);
            sum += com.getMoney();
        }
        System.out.println("该公司一年需要支付的薪水总额为:"+sum);
    }
}

由于是计算一年公司需要支付的薪水总额,所以对应的年数为1,月数为12,然后由题意当数组下标为奇数时按月计算薪水,偶数时按年计算薪水,每次累加到sum总值中,最后输出sum得到薪水总额。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

挽璃华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值