// 抽象クラス 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) {
// Manager クラスの利用例
Manager manager = new Manager(50000, 10000);
System.out.println("Manager's Salary: $" + manager.calculateSalary());
// Developer クラスの利用例
Developer developer = new Developer(25, 160);
System.out.println("Developer's Salary: $" + developer.calculateSalary());
}
}
この例では、Employee
クラスが抽象メソッド calculateSalary()
を宣言しています。それを継承する具象クラス Manager
と Developer
が、それぞれの職種に応じた給与計算を行うメソッドを実装しています。Main
クラスで Manager
クラスと Developer
クラスをインスタンス化し、calculateSalary()
メソッドを呼び出して、各従業員の給与が表示される様子が示されています。
出力結果:
Manager's Salary: $60000.0
Developer's Salary: $4000.0