面向对象银行系统通过Customer、Account、SavingsAccount、CheckingAccount和Bank类映射现实实体,利用封装保护余额、继承扩展账户类型、多态支持统一接口,职责分明且易于扩展。

用面向对象思想写简易银行系统,核心是把“人”“账户”“交易”这些现实概念映射成类,通过封装、继承和多态让代码结构清晰、易于扩展。
设计关键类:明确职责与关系
先识别核心实体,为每个实体建一个类,并定义它的属性和行为:
- Customer(客户):包含姓名、身份证号等基本信息;不直接操作余额,只通过账户交互
- Account(账户):封装账号、余额、开户日期;提供 deposit()、withdraw()、getBalance() 等方法;余额变动逻辑全在这里,体现封装
- SavingsAccount(储蓄账户) 和 CheckingAccount(支票账户) 可继承 Account,分别添加利率属性或透支额度,体现继承
- Bank(银行):管理客户与账户的集合(如 HashMap<String, Account>),提供开户、查询、转账等业务方法;它协调对象协作,不直接处理金额计算
封装数据,暴露安全接口
账户余额必须私有,禁止外部直接修改:
public class Account {
private double balance;
private final String accountNumber;
public Account(String accountNumber, double initial) {
this.accountNumber = accountNumber;
this.balance = Math.max(0, initial); // 防止负初始余额
}
public void deposit(double amount) {
if (amount > 0) balance += amount;
}
public boolean withdraw(double amount) {
if (amount > 0 && amount <= balance) {
balance -= amount;
return true;
}
return false;
}
public double getBalance() { return balance; } // 只读访问
}
这样即使后续加手续费、日限额等规则,只需改 withdraw() 内部逻辑,调用方代码完全不用动。
立即学习“Java免费学习笔记(深入)”;
用多态统一处理不同账户类型
让 SavingsAccount 和 CheckingAccount 都重写 withdraw() 或 addInterest(),Bank 类就能统一调用:
- 定义抽象方法
calculateInterest()在 Account 中,子类各自实现 - 转账时,Bank 调用
from.withdraw()和to.deposit(),无需关心 from 是储蓄还是支票账户 - 新增 CreditAccount(信用卡账户)?只需继承 Account 并重写相关方法,Bank 类几乎不用改
主流程体现对象协作
main 方法里不写业务逻辑,只组装对象、触发行为:
public static void main(String[] args) {
Bank bank = new Bank();
Customer alice = new Customer("Alice", "110110");
Account acc1 = bank.openAccount(alice, "SAV-001", 1000.0);
acc1.deposit(500.0);
boolean success = acc1.withdraw(200.0);
System.out.println("当前余额:" + acc1.getBalance()); // 输出 1300.0
}
每行代码都在表达“谁做了什么”,而不是一堆变量和 if 判断堆砌流程。以后加登录验证、日志记录,只需在 Customer 或 Bank 层增强,不影响 Account 的稳定性。


















