// 抽象クラス Employee
abstract class Employee {
// 抽象メソッド calculateSalary を宣言
public abstract double calculateSalary();
}
// 具象クラス Manager
class Manager extends Employee {
private double baseSalary;
private double bonus;
// コンストラクタ
public Manager(double baseSalary, double bonus) {
this.baseSalary = baseSalary;
this.bonus = bonus;
}
// calculateSalary メソッドの実装
@Override
public double calculateSalary() {
return baseSalary + bonus;
}
}
// 具象クラス Developer
class Developer extends Employee {
private double hourlyRate;
private int hoursWorked;
// コンストラクタ
public Developer(double hourlyRate, int hoursWorked) {
this.hourlyRate = hourlyRate;
this.hoursWorked = hoursWorked;
}
// calculateSalary メソッドの実装
@Override
public double calculateSalary() {
return hourlyRate * hoursWorked;
}
}
// メインクラス
public class Main {
public static void main(String[] args) {
// Employee 型の配列を作成
Employee[] employees = new Employee[2];
// Manager インスタンスを配列に格納
employees[0] = new Manager(50000, 10000);
// Developer インスタンスを配列に格納
employees[1] = new Developer(25, 160);
// ポリモーフィズムを使用して異なる従業員の給与を表示
for (Employee employee : employees) {
System.out.println("Employee's Salary: $" + employee.calculateSalary());
}
}
}
このコードでは、Employee
クラスが抽象メソッド calculateSalary
を宣言し、Manager
と Developer
クラスがそれをオーバーライドしています。そして、Employee
型のリストに Manager
と Developer
のインスタンスを格納し、ポリモーフィズムを使用して給与を表示しています。
出力結果:
Employee's Salary: $60000.0
Employee's Salary: $4000.0
ここで、Manager
クラスのインスタンスの給与は基本給(baseSalary
)とボーナス(bonus
)の合計であり、Developer
クラスのインスタンスの給与は時給(hourlyRate
)と働いた時間(hoursWorked
)の積です。