Java继承实例解析:员工类与飞机引擎模拟
立即解锁
发布时间: 2025-08-21 00:56:25 阅读量: 2 订阅数: 12 


Java编程艺术:从初学者到大师的进阶指南
# Java 继承实例解析:员工类与飞机引擎模拟
## 1. 员工类继承示例
### 1.1 类结构概述
本示例扩展了相关功能,构建了一个员工类的继承体系。主要涉及的类有 `Person`、`Employee`、`HourlyEmployee` 和 `SalariedEmployee`,以及接口 `Payable`。以下是类之间的继承关系:
- `Employee` 类继承自 `Person` 类,并实现了 `Payable` 接口。由于 `Employee` 类未实现 `Payable` 接口中的 `pay()` 方法,所以它被声明为抽象类。
- `HourlyEmployee` 和 `SalariedEmployee` 类继承自 `Employee` 类,并分别以自己的方式实现了 `pay()` 方法。
### 1.2 代码实现
#### 1.2.1 `Payable` 接口
```java
interface Payable {
double pay();
}
```
#### 1.2.2 `Employee` 类
```java
public abstract class Employee extends Person implements Payable {
private String _employee_number = null;
public Employee(String f_name, String m_name, String l_name, int dob_year, int dob_month,
int dob_day, String gender, String employee_number) {
super(f_name, m_name, l_name, dob_year, dob_month, dob_day, gender);
_employee_number = employee_number;
}
public String getEmployeeNumber() {
return _employee_number;
}
public String getEmployeeInfo() {
return getEmployeeNumber() + " " + getFirstName() + " " + getLastName();
}
}
```
#### 1.2.3 `HourlyEmployee` 类
```java
public class HourlyEmployee extends Employee {
private double _hours_worked;
private double _hourly_wage_rate;
public HourlyEmployee(String f_name, String m_name, String l_name, int dob_year, int dob_month,
int dob_day, String gender, String employee_number,
double hourly_wage_rate, double hours_worked) {
super(f_name, m_name, l_name, dob_year, dob_month, dob_day, gender, employee_number);
_hourly_wage_rate = hourly_wage_rate;
_hours_worked = hours_worked;
}
public double pay() {
return _hourly_wage_rate * _hours_worked;
}
}
```
#### 1.2.4 `SalariedEmployee` 类
```java
public class SalariedEmployee extends Employee {
private double _annual_salary;
public SalariedEmployee(String f_name, String m_name, String l_name, int dob_year, int dob_month,
int dob_day, String gender, String employee_number, double annual_salary) {
super(f_name, m_name, l_name, dob_year, dob_month, dob_day, gender, employee_number);
_annual_salary = annual_salary;
}
public double pay() {
return _annual_salary / 24; // 24 pay periods
}
}
```
#### 1.2.5 `EmployeeTestApp` 类
```java
import java.text.*;
public class EmployeeTestApp {
public static void main(String[] args) {
Employee[] employees = new Employee[4];
NumberFormat number_format = NumberFormat.getInstance();
number_format.setMaximumFractionDigits(2);
employees[0] = new SalariedEmployee("Steve", "J", "Jones", 1983, 3, 4, "M",
"000-11111", 65000.00);
employees[1] = new HourlyEmployee("Bob", "E", "Evans", 1992, 1, 2, "M",
"000-22222", 23.00, 80.00);
employees[2] = new SalariedEmployee("Janice", "A", "Brown", 1983, 3, 4, "F",
"000-33333", 100000.00);
employees[3] = new HourlyEmployee("Helen", "Of", "Troy", 1946, 4, 8, "F",
"000-44444", 50.00, 80.00);
for (int i = 0; i < employees.length; i++) {
System.out.println("Employee: " + employees[i].getEmployeeInfo() +
" Pay: " + "$" + number_format.format(employees[i].pay()));
}
}
}
```
### 1.3 多态的应用
在 `EmployeeTestApp` 类中,声明了一个 `Employee` 类型的数组 `employees`,并将其元素分别初始化为 `HourlyEmployee` 或 `SalariedEmployee` 对象。通过 `Employee` 类的接口对每个员工对象进行多态操作,调用 `getEmployeeInfo()` 和 `pay()` 方法。这种多态性使得代码更加灵活和可扩展。
### 1.4 操作步骤
1. 定义 `Payable` 接口,声明 `pay()` 方法。
2. 创建抽象类 `Employee`,继承 `Person` 类并实现 `Payable` 接口,定义员工编号等属性和相关方法。
3. 实现 `HourlyEmployee` 和 `SalariedEmployee` 类,继承 `Employee` 类并实现 `pay()` 方法。
4. 在 `EmployeeTestApp` 类中创建 `Employee` 数组,初始化元素并进行多态操作。
## 2. 飞机引擎模拟继承示例
### 2.1 示例概述
本示例扩展了飞机引擎模拟,将继承概念与组合设计相结合,并引入了监听器的概念。监听器是一种响应事件的组件,常用于 AWT 和 Swing 包中处理 GUI 事件。此外,还使用了 `java.util` 包中的 `Vector` 和 `Hashtable` 集合类,以及 `synchronized` 关键字来确保对某些对象的原子访问。
### 2.2 UML 图分析
飞机引擎模拟的 UML 图展示了类之间的关系。主要的类有 `Part`、`Pump`、`Sensor`、`Engine`、`FuelPump`、`OxygenSensor` 和 `SimpleEngine`,以及接口 `IPump`、`ISensor`、`IEngine` 和 `PartListener`。以下是类之间的继承和实现关系:
- `Part` 类是继承层次中的主要类,除 `PartStatus` 和 `PartEvent` 类外,其他类都继承自 `Part` 类。
- `PartEvent` 类继承自 `EventObject` 类,`PartListener` 接口继承自 `EventListener` 接口。
- `Pump`、`Sensor` 和 `Engine` 类继承自 `Part` 类,并分别实现了 `IPump`、`ISensor` 和 `IEngine` 接口。
- `FuelPump` 和 `OxygenSensor` 类分别是 `Pump` 和 `Sensor` 类的具体实现。
- `SimpleEngine` 类继承自 `Engine` 类,并实现了 `PartListener` 接口。
### 2.3 代码实现
#### 2.3.1 `Part` 类
```java
import java.util.*;
public abstract class Part {
private PartStatus _status = null;
private String _part_name = null;
private Vector _part_listeners = null;
private Hashtable _sub_parts = null;
public Part(PartStatus status, String part_name) {
_status = status;
_part_name = part_name;
System.out.println("Part object created!");
}
public Part(String part_name) {
_status = PartStatus.WORKING;
_part_name = part_name;
System.out.println("Part object created!");
}
public PartStatus getPartStatus() {
return _status;
}
public String getPartName() {
return _part_name;
}
public void setPartStatus(PartStatus status) {
_status = status;
firePartStatusChangeEvent();
}
public boolean isWorking() {
if (_sub_parts != null) {
for (Enumeration e = getSubPartsEnumeration(); e.hasMoreElements(); ) {
if (((Part) e.nextElement()).isWorking()) {
continue;
} else {
setPartStatus(PartStatus.NOT_WORKING);
break;
}
}
}
System.out.println(getPartName() + " " + " isWorking status = " + _status.isWorking());
return _status.isWorking();
}
public void addPartListener(PartListener pl) {
```
0
0
复制全文
相关推荐










