Java 面向对象编程:员工类层次结构
Java 面向对象编程:员工类层次结构
本示例展示了如何使用 Java 语言实现一个员工类层次结构,包括计算不同类型员工的工资。代码包含 SalariedEmployee
、HourlyEmployee
和 CommissionEmployee
类,并展示了如何使用继承、方法重写和构造函数来构建一个灵活的员工管理系统。
代码示例
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]);
}
}
}
代码说明
-
Employee
类- 定义了
name
和id
属性,分别表示员工姓名和身份证号。 - 提供了构造函数、getter 方法和
toString
方法用于访问和显示员工信息。 getSalary
方法返回 0,因为Employee
类是一个抽象类,具体的工资计算由子类实现。
- 定义了
-
SalariedEmployee
类- 继承自
Employee
类。 - 添加了
monthSalary
属性,表示月薪。 - 重写了
getSalary
方法,返回月薪。 - 重写了
toString
方法,包含员工姓名、身份证号和月薪信息。
- 继承自
-
HourlyEmployee
类- 继承自
Employee
类。 - 添加了
hourSalary
和workHour
属性,分别表示每小时工资和工作时间。 - 重写了
getSalary
方法,返回每小时工资乘以工作时间的工资。 - 重写了
toString
方法,包含员工姓名、身份证号、每小时工资和工作时间信息。
- 继承自
-
CommissionEmployee
类- 继承自
Employee
类。 - 添加了
commissionRatio
和sale
属性,分别表示提成比例和销售额。 - 重写了
getSalary
方法,返回提成比例乘以销售额的工资。 - 重写了
toString
方法,包含员工姓名、身份证号、提成比例和销售额信息。
- 继承自
-
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
方法来格式化输出员工信息。
本示例只是一个简单的示例,可以根据实际需求进行扩展和改进。例如,可以添加更多的员工类型,或者使用数据库来存储员工信息。

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