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

用面向对象思想写简易银行系统,核心是把“人”“账户”“交易”这些现实概念映射成类,通过封装、继承和多态让代码结构清晰、易于扩展。
设计关键类:明确职责与关系
先识别核心实体,为每个实体建一个类,并定义它的属性和行为:
- Customer(客户):包含姓名、身份证号等基本信息;不直接操作余额,只通过账户交互
- Account(账户):封装账号、余额、开户日期;提供 deposit()、withdraw()、getBalance() 等方法;余额变动逻辑全在这里,体现封装
- SavingsAccount(储蓄账户) 和 CheckingAccount(支票账户) 可继承 Account,分别添加利率属性或透支额度,体现继承
-
Bank(银行):管理客户与账户的集合(如 HashMap
),提供开户、查询、转账等业务方法;它协调对象协作,不直接处理金额计算
封装数据,暴露安全接口
账户余额必须私有,禁止外部直接修改:
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
<p>这样即使后续加手续费、日限额等规则,只需改 withdraw() 内部逻辑,调用方代码完全不用动。</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/gongju/2847" title="OpenJDK 24"><img
src="https://img.php.cn/upload/manual/001/431/639/6acf4227f079d889.png" alt="OpenJDK 24" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/gongju/2847" title="OpenJDK 24" class="overflowclass">OpenJDK 24</a>
<p class="overflowclass">OpenJDK 24 Windows x64 官方参考实现(24+36),适合 Windows 环境进行 Java 开发、编译、运行和版本兼容性验证。</p>
</div>
<a rel="nofollow" href="/xiazai/gongju/2847" title="OpenJDK 24" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>
<h3>用多态统一处理不同账户类型</h3>
<p>让 SavingsAccount 和 CheckingAccount 都重写 withdraw() 或 addInterest(),Bank 类就能统一调用:</p>
- 定义抽象方法
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 的稳定性。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










