二、根据下面的 UML 类图编写一个字符界面的 Java Application 程序, 其中:Worker 为抽象类,它的 pay()为抽象方法,Manager 和 Employee 继承自 Worker,编程测试它们
时间: 2024-11-13 09:19:24 浏览: 0
Java程序设计课件:第五章 抽象类和接口.ppt
根据您提供的UML类图,我们可以创建一个Java应用,包含`Worker`抽象类及其两个子类`Manager`和`Employee`。这些类需要有一个公共的字符界面,以便用户可以交互。以下是简单的实现:
```java
// 定义抽象Worker类
abstract class Worker {
abstract double pay(); // 抽象方法pay()
public void displayInfo() {
System.out.println("This is a worker.");
}
}
// Manager子类继承Worker
class Manager extends Worker {
@Override
double pay() {
return 5000.0; // 假设经理的基本工资是5000元
}
@Override
public void displayInfo() {
System.out.println("I am a manager with a pay of " + pay());
}
}
// Employee子类继承Worker
class Employee extends Worker {
private double hourlyRate;
// 构造函数,假设hourlyRate是一个属性
public Employee(double hourlyRate) {
this.hourlyRate = hourlyRate;
}
@Override
double pay() {
return hourlyRate * 40; // 假设员工按小时计算,每周工作40小时
}
@Override
public void displayInfo() {
System.out.println("I am an employee with an hourly rate of " + hourlyRate +
". My weekly pay is " + pay());
}
}
public class CharacterBasedApp {
public static void main(String[] args) {
// 创建实例并显示信息
Worker worker1 = new Manager();
worker1.displayInfo();
Worker worker2 = new Employee(20);
worker2.displayInfo();
// 如果直接将Worker类型的引用指向Manager或Employee,这里会自动调用相应子类的pay()方法
Worker worker3 = new Worker(); // 默认为Manager
if (worker3 instanceof Manager) {
((Manager) worker3).displayInfo();
} else if (worker3 instanceof Employee) {
((Employee) worker3).displayInfo();
} else {
System.out.println("Unknown worker type");
}
}
}
```
阅读全文