某公司的雇员分为以下若干类

本文详细介绍Java类设计,展示如何创建SalariedEmployee、HourlyEmployee、SalesEmployee和BasePlusSalesEmployee四种类型的员工,并计算他们在11月的工资,涉及工资规则、封装和继承特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * 某公司的雇员分为以下若干类:
 * Employee:这是所有员工总的父类,其属性包括:员工姓名,员工的生日
 *                               其方法包括:getSalary(int month)
 *                               根据月份来确定工资,如果该月员工过生日,则公司额外奖励100元。
 *
 * SalariedEmployee:Employee的子类,拿固定工资的员工,属性:月薪
 *
 * HourlyEmployee:Employee的子类,按小时拿工资的员工,每月工作超过160小时的部分按照1.5倍工资发放
 *                               属性:每小时的工资,每月工作的小时数
 *
 * SalesEmployee:Employee的子类,销售人员,工资由月销售额和提成率来决定
 *                               属性:月销售额、提成率
 *
 * BasePlusSalesEmployee:SalesEmployee的子类,有固定底薪的销售人员,工资由底薪加销售提成
 *                               属性:底薪
 * 根据要求创建SalariedEmployee、HourlyEmployee、SalesEmployee和BasePlusSalesEmployee
 * 并计算某个月这四个对象的工资
 * 要求:每个类都实现封装,不允许有非私有化属性。
 */
class EmployeeText{
    public static void main(String[] args) {
        //创建对象
        //拿固定工资的员工
        Employee worker1 = new SalariedEmployee("张三",11,5000);
        //按小时拿工资的员工
        Employee worker2 = new HourlyEmployee("李四",11,20,240);
        //销售人员
        Employee worker3 = new SalesEmployee("王五",11,300000,0.1);
        //有固定底薪的销售人员
        Employee worker4 = new BasePlusSalesEmployee("赵六",11,90000,0.1,1000);
        System.out.println("拿固定工资的员工11月的工资是:" + worker1.getSalary(11));
        System.out.println("按小时拿工资的员工11月的工资是:" + worker2.getSalary(11));
        System.out.println("销售人员11月的工资是:" + worker3.getSalary(11));
        System.out.println("有固定底薪的销售人员11月的工资是:" + worker4.getSalary(11));
    }
}
/*
程序运行结果:
    拿固定工资的员工11月的工资是:5100.0
    按小时拿工资的员工11月的工资是:5700.0
    销售人员11月的工资是:30000.0
    有固定底薪的销售人员11月的工资是:10100.0
*/
//父类
class Employee{
    //属性
    private String name;
    private  int birthday;
    //无参构造
    public Employee() {
    }
    //有参构造
    public Employee(String name, int birthday) {
        this.name = name;
        this.birthday = birthday;
    }
    //set and get
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getBirthday() {
        return birthday;
    }

    public void setBirthday(int birthday) {
        this.birthday = birthday;
    }

    //获取员工工资的方法
    public double getSalary(int month){
        return 0;   //具体实现在子类重写该方法的时候提供
    }
}

//拿固定工资的员工类
class SalariedEmployee extends Employee{
    //子类特有属性
    private double yueXin;
    //无参构造
    public SalariedEmployee() {
    }

    public SalariedEmployee(String name, int birthday) {
        //调用父类中有参构造
        super(name, birthday);
    }

    public SalariedEmployee(String name, int birthday, double yueXin) {
        //调用父类中有参构造
        super(name, birthday);
        //给子类中特有属性赋值
        this.yueXin = yueXin;
    }
    //get方法
    public double getYueXin() {
        return yueXin;
    }
    //set方法
    public void setYueXin(double yueXin) {
        this.yueXin = yueXin;
    }

    //重写父类中的方法
    @Override   //@Override是注解,表示下面的方法是重写父类中的方法
    public double getSalary(int month) {
        //如果该月员工过生日,工资增加100元
        if (this.getBirthday() == month){
            return this.getYueXin() + 100;
        }else {
            return this.getYueXin();
        }
    }
}

//按小时拿工资的员工类
class HourlyEmployee extends Employee{
    //时薪属性
    private double hourSalary;
    //工作时长属性
    private double hour;

    //无参构造
    public HourlyEmployee() {
    }

    //有参构造
    public HourlyEmployee(String name, int birthday, double hourSalary, double hour) {
        super(name, birthday);
        this.hourSalary = hourSalary;
        this.hour = hour;
    }

    //set and get
    public double getHourSalary() {
        return hourSalary;
    }

    public void setHourSalary(double hourSalary) {
        this.hourSalary = hourSalary;
    }

    public double getHour() {
        return hour;
    }

    public void setHour(double hour) {
        this.hour = hour;
    }

    //重写方法
    @Override
    public double getSalary(int month) {
        //指定一个变量
        double salary = 0;
        //如果工作时间小于160小时
        if (this.getHour() <= 160){
            salary = this.getHourSalary() * this.getHour();
        }else { //工作时间大于160小时
            salary = this.getHourSalary() * 160 + 1.5 * this.getHourSalary() * (this.getHour() - 160);
        }
        //如果工人这个月过生日
        if (this.getBirthday() == month){
            //工资增加100元
            salary += 100;
        }
        return salary;
    }
}
//SalesEmployee 销售人员类
class SalesEmployee extends Employee{
    //属性:月销售额、
    private double sale;
    //提成率
    private double royalty;

    //无参构造
    public SalesEmployee() {
    }

    //有参构造
    public SalesEmployee(String name, int birthday, double sale, double royalty) {
        super(name, birthday);
        this.sale = sale;
        this.royalty = royalty;
    }
    //get and set

    public double getSale() {
        return sale;
    }

    public void setSale(double sale) {
        this.sale = sale;
    }

    public double getRoyalty() {
        return royalty;
    }

    public void setRoyalty(double royalty) {
        this.royalty = royalty;
    }
    //重写父类中的方法

    @Override
    public double getSalary(int month) {
        return this.sale * this.royalty;
    }
}
//BasePlusSalesEmployee 有固定底薪的销售人员类
class BasePlusSalesEmployee extends SalesEmployee{
    private double basicSalary;

    //无参构造方法
    public BasePlusSalesEmployee() {
    }

    //有参构造方法
    public BasePlusSalesEmployee(String name, int birthday, double sale, double royalty, double basicSalary) {
        super(name, birthday, sale, royalty);
        this.basicSalary = basicSalary;
    }

    //set and get 方法
    public double getBasicSalary() {
        return basicSalary;
    }

    public void setBasicSalary(double basicSalary) {
        this.basicSalary = basicSalary;
    }

    //重写父类方法
    @Override
    public double getSalary(int month) {
        if (this.getBirthday() == month){
            return this.getSale() * this.getRoyalty() + this.getBasicSalary() + 100;
        }else {
            return this.getSale() * this.getRoyalty() + this.getBasicSalary();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值