本文透過設計一個 Account 類別,完整示範「封裝資料、提供業務行為、主程式測試」的 Java 物件導向開發流程。涵蓋存款、提款、餘額查詢核心功能,並處理提款餘額不足等業務邏輯。
public class Account {
private String accountNumber; // 帳號
private String ownerName; // 戶名
private double balance; // 餘額
// 建構子
public Account(String accountNumber, String ownerName, double initialBalance) {
this.accountNumber = accountNumber;
this.ownerName = ownerName;
this.balance = initialBalance;
}
// 存款
public void deposit(double amount) {
if (amount <= 0) throw new IllegalArgumentException("存款金額必須為正數");
balance += amount;
System.out.printf("%s 您的帳號 %s 存入 %.2f 元,現有餘額 %.2f 元%n",
ownerName, accountNumber, amount, balance);
}
// 提款
public void withdraw(double amount) {
if (amount <= 0) throw new IllegalArgumentException("提款金額必須為正數");
if (balance >= amount) {
balance -= amount;
System.out.printf("%s 您的帳號 %s 提出 %.2f 元,現有餘額 %.2f 元%n",
ownerName, accountNumber, amount, balance);
} else {
System.out.printf("%s 您的帳號 %s 餘額不足!目前餘額 %.2f 元%n",
ownerName, accountNumber, balance);
}
}
// 餘額查詢
public double getBalance() {
return balance;
}
// Getter
public String getAccountNumber() { return accountNumber; }
public String getOwnerName() { return ownerName; }
}
public class BankTest {
public static void main(String[] args) {
// 建立兩個帳戶
Account acc1 = new Account("622848123456789", "張三", 587.54);
Account acc2 = new Account("622848987654321", "李四", 87.54);
// 測試提款:餘額不足
acc1.withdraw(600.0); // 餘額不足
System.out.println(acc1.getOwnerName() + " 餘額 = " + acc1.getBalance());
// 測試存款
acc1.deposit(1000); // 存入 1000
// 查詢兩個帳戶餘額
System.out.println(acc1.getOwnerName() + " 的帳戶餘額:" + acc1.getBalance());
System.out.println(acc2.getOwnerName() + " 的帳戶餘額:" + acc2.getBalance());
}
}
張三 您的帳號 622848123456789 餘額不足!目前餘額 587.54 元
張三 餘額 = 587.54
張三 您的帳號 622848123456789 存入 1000.00 元,現有餘額 1587.54 元
張三 的帳戶餘額:1587.54
李四 的帳戶餘額:87.54
private,防止外部任意修改餘額導致帳目錯亂。IllegalArgumentException,比單純印出錯誤訊息更利於上層捕捉處理。Transaction 類別記錄每筆交易明細(時間、類型、金額、餘額)。BigDecimal 替代 double 避免浮點精度問題。BankService,支援多種帳戶實作(儲蓄、信用、投資)。synchronized 或 ReentrantLock),確保多執行緒環境下帳目正確。