// BankAccount クラス(抽象クラス)
abstract class BankAccount {
// メンバー変数
private String accountNumber;
private double balance;
// コンストラクタ
public BankAccount(String accountNumber, double initialBalance) {
this.accountNumber = accountNumber;
this.balance = initialBalance;
}
// deposit メソッドの実装
public void deposit(double amount) {
if (amount > 0) {
balance += amount;
System.out.println("Deposited: $" + amount);
} else {
System.out.println("Invalid deposit amount");
}
}
// withdraw メソッドの実装
public void withdraw(double amount) {
if (amount > 0 && amount <= balance) {
balance -= amount;
System.out.println("Withdrawn: $" + amount);
} else {
System.out.println("Invalid withdrawal amount or insufficient funds");
}
}
// 抽象メソッド(サブクラスで実装が必要)
public abstract void printAccountInfo();
}
// SavingsAccount クラス
class SavingsAccount extends BankAccount {
// コンストラクタ
public SavingsAccount(String accountNumber, double initialBalance) {
super(accountNumber, initialBalance);
}
// addInterest メソッドの実装
public void addInterest() {
double interestRate = 0.05; // 5%の利息を仮定
double interest = getBalance() * interestRate;
deposit(interest);
System.out.println("Interest added: $" + interest);
}
// printAccountInfo メソッドの実装
@Override
public void printAccountInfo() {
System.out.println("Savings Account: " + getAccountNumber() + ", Balance: $" + getBalance());
}
}
// CheckingAccount クラス
class CheckingAccount extends BankAccount {
// コンストラクタ
public CheckingAccount(String accountNumber, double initialBalance) {
super(accountNumber, initialBalance);
}
// applyOverdraftFee メソッドの実装
public void applyOverdraftFee() {
double overdraftFee = 20.0; // オーバードラフト手数料を仮定
withdraw(overdraftFee);
System.out.println("Overdraft fee applied: $" + overdraftFee);
}
// printAccountInfo メソッドの実装
@Override
public void printAccountInfo() {
System.out.println("Checking Account: " + getAccountNumber() + ", Balance: $" + getBalance());
}
}
この解答例では、BankAccount
クラスが口座の共通機能を提供し、SavingsAccount
クラスと CheckingAccount
クラスがそれぞれ普通預金口座と当座預金口座の機能を具体的に実装しています。サブクラスごとに異なるメソッドが追加され、それぞれの口座の情報を出力する printAccountInfo
メソッドも実装されています。