// 抽象クラス BankAccount
abstract class BankAccount {
private double balance;
// コンストラクタ
public BankAccount(double initialBalance) {
this.balance = initialBalance;
}
// withdraw メソッド
public abstract void withdraw(double amount);
// getBalance メソッド
public double getBalance() {
return balance;
}
}
// SavingsAccount クラス
class SavingsAccount extends BankAccount {
private double interestRate;
// コンストラクタ
public SavingsAccount(double initialBalance, double interestRate) {
super(initialBalance);
this.interestRate = interestRate;
}
// withdraw メソッドのオーバーライド
@Override
public void withdraw(double amount) {
// 特有の処理(例: 手数料を引いてから引き出し)
double fee = 0.5;
double totalAmount = amount + fee;
if (totalAmount <= getBalance()) {
// 引き出し可能な場合
super.withdraw(totalAmount);
} else {
System.out.println("Insufficient funds!");
}
}
}
// CheckingAccount クラス
class CheckingAccount extends BankAccount {
private double overdraftLimit;
// コンストラクタ
public CheckingAccount(double initialBalance, double overdraftLimit) {
super(initialBalance);
this.overdraftLimit = overdraftLimit;
}
// withdraw メソッドのオーバーライド
@Override
public void withdraw(double amount) {
// 特有の処理(例: オーバードラフトの範囲内で引き出し)
if (amount <= getBalance() + overdraftLimit) {
// 引き出し可能な場合
super.withdraw(amount);
} else {
System.out.println("Insufficient funds!");
}
}
}
// Main クラス
public class Main {
public static void main(String[] args) {
// 異なる種類の銀行口座のインスタンスを生成
SavingsAccount savingsAccount = new SavingsAccount(1000, 0.02);
CheckingAccount checkingAccount = new CheckingAccount(500, 200);
// 引き出しを行い、結果を表示
System.out.println("Initial Savings Account Balance: " + savingsAccount.getBalance());
savingsAccount.withdraw(50);
System.out.println("Savings Account Balance after Withdrawal: " + savingsAccount.getBalance());
System.out.println("\nInitial Checking Account Balance: " + checkingAccount.getBalance());
checkingAccount.withdraw(700);
System.out.println("Checking Account Balance after Withdrawal: " + checkingAccount.getBalance());
}
}
このプログラムでは、BankAccount
クラスを抽象クラスとして、SavingsAccount
クラスと CheckingAccount
クラスがそれを継承して withdraw
メソッドをオーバーライドしています。main
メソッドでは、異なる種類の銀行口座から引き出しを行い、結果を表示しています。