Employee类层次结构

创建四个类,分别为Employee类、SalariedEmplyee类、HourlyEmployee类和CommissionEmployee类。其中Employee类是其他三个类的父类。Employee类包含姓名和身份证号。除此之外,SalariedEmployee类还应包含每月工资;HourlyEmployee类还应包含每小时工资数和工作时间数;CommissionEmployee还应包含提成比例和销售总额。每个类都应有合适的构造方法、数据成员的设置和读取方法。编写一个应用程序,创建这些类的对象,并输出与对象相关的信息。注意子类有时需调用父类的构造方法和被覆盖的方法,成员变量定义为private,对有些方法实现重载。

package priv.lhw.employee;

import java.util.Objects;

public class CommissionEmployee extends Employee{
    /** 提成比例 */
    private double commissionRatio;
    /** 销售总额 */
    private int totalSales;

    /**
     * 默认构造函数
     */
    public CommissionEmployee(){

    }

    /**
     * 带参构造函数
     * @param name  姓名
     * @param id    身份证号
     * @param commissionRatio   提成比例
     * @param totalSales    销售总额
     */
    public CommissionEmployee(String name, String id, double commissionRatio, int totalSales){
        super(name, id);
        this.commissionRatio = commissionRatio;
        this.totalSales = totalSales;
        System.out.println("创建了一位销售员工! ");
    }

    /**
     *
     * @return 提成比例
     */
    public double getCommissionRatio() {
        return commissionRatio;
    }

    /**
     *
     * @return  销售总额
     */
    public double getTotalSales() {
        return totalSales;
    }

    /**
     * 设置提成比例
     * @param commissionRatio   提成比例
     */
    public void setCommissionRatio(double commissionRatio) {
        this.commissionRatio = commissionRatio;
    }

    /**
     * 设置销售总额
     * @param totalSales    销售总额
     */
    public void setTotalSales(int totalSales) {
        this.totalSales = totalSales;
    }

    @Override
    public String toString() {
        return "员工类型: 销售员工 \n" +
                "姓名: " + super.getName() + '\n' +
                "身份证号: " + super.getId() + '\n'+
                "提成比例: " + commissionRatio * 100 + "%\n" +
                "销售总额: " + totalSales + "\n";
    }

    @Override
    public boolean equals(Object other) {
        if (this == other) {
            return true;
        }
        if (other == null || getClass() != other.getClass()) {
            return false;
        }
        if (!super.equals(other)) {
            return false;
        }
        CommissionEmployee that = (CommissionEmployee) other;
        return Double.compare(that.commissionRatio, commissionRatio) == 0 &&
                Double.compare(that.totalSales, totalSales) == 0;
    }

    @Override
    public int hashCode() {
        return Objects.hash(super.hashCode(), commissionRatio, totalSales);
    }
}

package priv.lhw.employee;

import java.util.Objects;

abstract public class Employee {
    /** 姓名 */
    private String name;
    /** 身份证号 */
    private String id;

    /**
     * 默认构造函数
     */
    public Employee(){

    }

    /**
     * 带参构造函数
     * @param name  姓名
     * @param id    身份证号
     */
    public Employee(String name, String id){
        this.name = name;
        this.id = id;
    }

    /**
     *
     * @return  身份证号
     */
    public String getId() {
        return id;
    }

    /**
     *
     * @return  姓名
     */
    public String getName() {
        return name;
    }

    /**
     * 设置身份证号
     * @param id 身份证号
     */
    public void setId(String id) {
        this.id = id;
    }

    /**
     * 设置姓名
     * @param name  姓名
     */
    public void setName(String name) {
        this.name = name;
    }

    @Override
    abstract public String toString();

    @Override
    public boolean equals(Object other) {
        if (this == other) {
            return true;
        }
        if (other == null || getClass() != other.getClass()) {
            return false;
        }
        Employee employee = (Employee) other;
        return name.equals(employee.name) &&
                id.equals(employee.id);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, id);
    }
}

package priv.lhw.employee;

import java.util.Objects;

public class HourlyEmployee extends Employee{
    /** 时薪 */
    private double hourlyWage;
    /** 工作时长 */
    private double workingHours;

    /**
     * 默认构造函数
     */
    public HourlyEmployee(){

    }

    /**
     * 带参构造函数
     * @param name 姓名
     * @param id    身份证
     * @param hourlySalary  时薪
     * @param workingHours  工作时长
     */
    public HourlyEmployee(String name, String id, double hourlySalary, double workingHours){
        super(name, id);
        this.hourlyWage = hourlySalary;
        this.workingHours = workingHours;
        System.out.println("创建了一位时薪员工! ");
    }

    /**
     *
     * @return 时薪
     */
    public double getHourlySalary() {
        return hourlyWage;
    }

    /**
     *
     * @return 工作时长
     */
    public double getWorkingHours() {
        return workingHours;
    }

    /**
     * 设置时薪
     * @param hourlySalary 时薪
     */
    public void setHourlySalary(double hourlySalary) {
        this.hourlyWage = hourlySalary;
    }

    /**
     * 设置工作时长
     * @param workingHours 工作时长
     */
    public void setWorkingHours(double workingHours) {
        this.workingHours = workingHours;
    }

    @Override
    public String toString() {
        return "员工类型: 时薪员工 \n" +
                "姓名: " + super.getName() + '\n' +
                "身份证号: " + super.getId() + '\n' +
                "每小时工资数: " + hourlyWage + "\n" +
                "工作时间数: " + workingHours + "\n";
    }

    @Override
    public boolean equals(Object other) {
        if (this == other) {
            return true;
        }
        if (other == null || getClass() != other.getClass()) {
            return false;
        }
        if (!super.equals(other)) {
            return false;
        }
        HourlyEmployee that = (HourlyEmployee) other;
        return Double.compare(that.hourlyWage, hourlyWage) == 0 &&
                Double.compare(that.workingHours, workingHours) == 0;
    }

    @Override
    public int hashCode() {
        return Objects.hash(super.hashCode(), hourlyWage, workingHours);
    }
}

package priv.lhw.employee;

public class Main {

    public static void main(String[] args){

        SalariedEmplyee salariedEmplyee = new SalariedEmplyee("李四", "222222222", 2345.6);
        HourlyEmployee hourlyEmployee = new HourlyEmployee("王五", "333333333", 50, 10);
        CommissionEmployee commissionEmployee = new CommissionEmployee("赵六", "444444444", 0.25, 10);
        Employee[] employees = {salariedEmplyee, hourlyEmployee, commissionEmployee};
        for (Employee e : employees){
            System.out.println(e);
        }
    }
}


package priv.lhw.employee;

import java.util.Objects;

public class SalariedEmplyee extends Employee{
    /** 月薪 */
    private double monthlySalary;

    /**
     * 默认构造函数
     */
    public SalariedEmplyee(){

    }

    /**
     * 带参构造函数
     * @param name  姓名
     * @param id    身份证号
     * @param monthlySalary 月薪
     */
    public SalariedEmplyee(String name, String id, double monthlySalary){
        super(name, id);
        this.monthlySalary = monthlySalary;
        System.out.println("创建了一位月薪员工! ");
    }

    /**
     *
     * @return 月薪
     */
    public double getMonthlySalary() {
        return monthlySalary;
    }

    /**
     * 设置月薪
     * @param monthlySalary 月薪
     */
    public void setMonthlySalary(double monthlySalary) {
        this.monthlySalary = monthlySalary;
    }

    @Override
    public String toString() {
        return "员工类型: 月薪员工 \n" +
                "姓名: " + super.getName() + '\n' +
                "身份证号: " + super.getId() + '\n' +
                "每月工资: " + monthlySalary + "\n";
    }

    @Override
    public boolean equals(Object other) {
        if (this == other) {
            return true;
        }
        if (other == null || getClass() != other.getClass()) {
            return false;
        }
        if (!super.equals(other)) {
            return false;
        }
        SalariedEmplyee that = (SalariedEmplyee) other;
        return Double.compare(that.monthlySalary, monthlySalary) == 0;
    }

    @Override
    public int hashCode() {
        return Objects.hash(super.hashCode(), monthlySalary);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值