求各位老哥编写一下这个Java程序,提供代码

计算企业薪水
要求有一个abstract类,类名为Employee。Employee的子类有YearWorker、MonthWorker、WeekWorker。YearWorker对象按年领取薪水(12000元/年),MonthWorker对象按月领取薪水(2300元/月),WeekWorker对象按周领取薪水(780元/周)。Employee类有一个abstract方法: public abstract earnings();子类必须重写父类的earnings()方法,给出各自领取报酬的具体方式。有一个Company类,该类用Employee对象数组作为成员,Employee对象数组的单元可以是YearWorker对象的上转型对象、MonthWorker对象的上转型对象或WeekWorker对象的上转型对象。程序能输出Company对象一年需要支付的薪水总和。

class Company {
    Employee[] em; //Employee作为成员
    Company(Employee[] em) { //构造函数
        this.em=em;    
    } 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Employee[] em=new Employee[3];
        em[0]=new YearWorker(1,12000.0); //上转型对象
        em[1]=new MonthWorker(11,8000.0);
        em[2]=new WeekWorker(40,1200.0);
        Company com=new Company(em);
        double sum;
        sum=em[0].earnings()+em[1].earnings()+em[2].earnings();
        System.out.println("总工资为:"+sum);
 
    }
 
}
abstract class Employee {
    abstract double earnings(); //抽象方法
}
class MonthWorker extends Employee {
    int month;
    double monthSalary;
    MonthWorker(int m,double s){
        month=m;
        monthSalary=s;
    }
    double earnings() {
        return month*monthSalary;
    }
 
}
class WeekWorker extends Employee {
    int week;
    double weekSalary;
    WeekWorker(int w,double s){
        week=w;
        weekSalary=s;
    }
    double earnings() {
        return week*weekSalary;
    }
}
class YearWorker extends Employee {
    int year;
    double yearSalary;
    YearWorker(int y,double s){ //工作年数,年工资
        year=y;
        yearSalary=s;
    }
    double earnings() {  //重写抽象方法
        return year*yearSalary;
    }
 
}

这公司年薪比月薪低,月薪比周薪低