Java 面向对象编程:员工类层次结构

本示例展示了如何使用 Java 语言实现一个员工类层次结构,包括计算不同类型员工的工资。代码包含 SalariedEmployeeHourlyEmployeeCommissionEmployee 类,并展示了如何使用继承、方法重写和构造函数来构建一个灵活的员工管理系统。

代码示例

import java.util.Scanner;

class Employee {
    private String name;
    private String id;

    public Employee(String name, String id) {
        this.name = name;
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public String getId() {
        return id;
    }

    public double getSalary() {
        return 0;
    }

    @Override
    public String toString() {
        return 'Employee[name=' + name + ',id=' + id + ']';
    }
}

class SalariedEmployee extends Employee {
    private double monthSalary;

    public SalariedEmployee(String name, String id, double monthSalary) {
        super(name, id);
        this.monthSalary = monthSalary;
    }

    public double getMonthSalary() {
        return monthSalary;
    }

    @Override
    public double getSalary() {
        return monthSalary;
    }

    @Override
    public String toString() {
        return 'SalariedEmployee' + super.toString() + '[monthSalary=' + monthSalary + ']';
    }
}

class HourlyEmployee extends Employee {
    private double hourSalary;
    private double workHour;

    public HourlyEmployee(String name, String id, double hourSalary, double workHour) {
        super(name, id);
        this.hourSalary = hourSalary;
        this.workHour = workHour;
    }

    public double getHourSalary() {
        return hourSalary;
    }

    public double getWorkHour() {
        return workHour;
    }

    @Override
    public double getSalary() {
        return hourSalary * workHour;
    }

    @Override
    public String toString() {
        return 'HourlyEmployee' + super.toString() + '[hourSalary=' + hourSalary + ',workHour=' + workHour + ']';
    }
}

class CommissionEmployee extends Employee {
    private double commissionRatio;
    private double sale;

    public CommissionEmployee(String name, String id, double commissionRatio, double sale) {
        super(name, id);
        this.commissionRatio = commissionRatio;
        this.sale = sale;
    }

    public double getCommissionRatio() {
        return commissionRatio;
    }

    public double getSale() {
        return sale;
    }

    @Override
    public double getSalary() {
        return commissionRatio * sale;
    }

    @Override
    public String toString() {
        return 'CommissionEmployee' + super.toString() + '[commissionRatio=' + commissionRatio + ',sale=' + sale + ']';
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        Employee[] e = new Employee[3];
        e[0] = new SalariedEmployee(in.next(), in.next(), in.nextDouble());
        e[1] = new HourlyEmployee(in.next(), in.next(), in.nextDouble(), in.nextDouble());
        e[2] = new CommissionEmployee(in.next(), in.next(), in.nextDouble(), in.nextDouble());
        for (int i = 0; i < e.length; i++) {
            System.out.println(e[i].getSalary());
            System.out.println(e[i]);
        }
    }
}

代码说明

  1. Employee

    • 定义了 nameid 属性,分别表示员工姓名和身份证号。
    • 提供了构造函数、getter 方法和 toString 方法用于访问和显示员工信息。
    • getSalary 方法返回 0,因为 Employee 类是一个抽象类,具体的工资计算由子类实现。
  2. SalariedEmployee

    • 继承自 Employee 类。
    • 添加了 monthSalary 属性,表示月薪。
    • 重写了 getSalary 方法,返回月薪。
    • 重写了 toString 方法,包含员工姓名、身份证号和月薪信息。
  3. HourlyEmployee

    • 继承自 Employee 类。
    • 添加了 hourSalaryworkHour 属性,分别表示每小时工资和工作时间。
    • 重写了 getSalary 方法,返回每小时工资乘以工作时间的工资。
    • 重写了 toString 方法,包含员工姓名、身份证号、每小时工资和工作时间信息。
  4. CommissionEmployee

    • 继承自 Employee 类。
    • 添加了 commissionRatiosale 属性,分别表示提成比例和销售额。
    • 重写了 getSalary 方法,返回提成比例乘以销售额的工资。
    • 重写了 toString 方法,包含员工姓名、身份证号、提成比例和销售额信息。
  5. Main

    • 创建了三个不同类型的员工对象,并使用 Scanner 类从用户输入中获取员工信息。
    • 使用循环遍历员工对象,输出每个员工的工资和信息。

代码运行结果

输入样例:

Mike 0001 5000
Jack 0002 20 300
Tom 0003 0.2 50000

输出样例:

5000.0
SalariedEmployee[name=Mike,id=0001][monthSalary=5000.0]
6000.0
HourlyEmployee[name=Jack,id=0002][hourSalary=20.0,workHour=300.0]
10000.0
CommissionEmployee[name=Tom,id=0003][commissionRatio=0.2,sale=50000.0]

代码总结

本示例展示了如何使用面向对象编程的概念,如继承、多态和方法重写,来构建一个灵活的员工管理系统。通过继承和多态,我们可以避免重复代码,并轻松地扩展系统以适应新的员工类型。

注意:

  • 代码中的 Employee 类是一个抽象类,它不能被实例化。
  • 代码使用了 Scanner 类来获取用户输入。
  • 代码使用了 toString 方法来格式化输出员工信息。

本示例只是一个简单的示例,可以根据实际需求进行扩展和改进。例如,可以添加更多的员工类型,或者使用数据库来存储员工信息。

Java 面向对象编程:员工类层次结构

原文地址: http://www.cveoy.top/t/topic/34v 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录