关联与继承练习题
题目:
创建一个银行账户的继承层次,表示银行的所有客户的账户。每个客户都能在他们的银行账户存钱,取钱。但是账户可以分为更具体的两种类型,例如,依靠存款生息的存储账户SavingsAccount类,另一种就是信用卡账户CheckingAccount(没有利息但可以透支一定的金额)。每个账户的每次交易都需要存储以方便用来查询。每个客户可以拥有很多不同id的银行账户。
【任务一】根据设计出的UML图,回答问题
(1). Person和Account之间是什么关系?
Person与Account是关联关系。一个用户可以持有多个账户,且用户与账户相对独立
(2). Account和Transaction之间是什么关系?
Account与Transaction是依赖关系。因为Transaction是由Account构造出来的。只有Account存在的情况下,Transaction才存在
(3). SavingsAccount和CheckingAccount和Account之间是什么关系?
继承关系,SavingsAccount和CheckingAccount是Account的继承
【任务二】根据设计图和运行结果,设计出每个类的代码。测试程序的主要代码已经给出,请补充部分方法。
public class TestAccount {
public static void main (String[] args) {
Person p = new Person(“George”);
//创建一个储蓄账户account1
SavingsAccount account1 = new SavingsAccount(p.getName(),1122, 1000);
SavingsAccount.setAnnualInterestRate(5.5);
//创建一个和account1相同id的储蓄账户
SavingsAccount account2 = new SavingsAccount(p.getName(),1122, 1000);
//创建一个信用卡账户account3
CheckingAccount account3 = new CheckingAccount(p.getName(),2233,0, 20000);
//加入account1
p.addAcouunt(account1);
//一个人不能拥有相同的id的账户,account2不能加入成功
p.addAcouunt(account2);
//加入account3
p.addAcouunt(account3);
//在Person类中定printAllAccounts方法并补充完整
p.printAllAccounts();
account1.deposit(30);
account1.deposit(40);
account1.deposit(50);
account1.withdraw(5);
account1.withdraw(4);
account1.withdraw(2);
//在测试类中定义printAllTrans方法,并补充完整
printAllTrans(account1);
account3.withdraw(3000);
account3.withdraw(4000);
account3.withdraw(5000);
account3.withdraw(8000);
printAllTrans(account3);
}
public static void printAllTrans(Account a){
//补充代码
}
}
}
源码:
Account(账户)类:
import java.util.ArrayList;
//CheckingAccount与SavingsAccount的父类
public class Account {
//存储人的姓名
private String personName;
//卡号
private int carId;
//存储金额
private int balance;
//用于存储账户所有的交易信息
private ArrayList<Transaction> transactions = new ArrayList<>();
Account(String personName,int carId,int balance){
this.personName = personName;
this.carId = carId;
this.balance = balance;
}
//用于存取CheckingAccount传入的参数
Account(String personName,int carId){
this.personName = personName;
this.carId = carId;
}
//传入金额
public void setBalance(int balance) {
this.balance = balance;
}
//获取卡号
public int getCarId(){
return carId;
}
//获取用户名
public String getPersonName() {
return personName;
}
//获取卡内余额
public int getBalance() {
return balance;
}
//向订单容器内添加订单
public void addTran(Transaction transaction){
transactions.add(transaction);
}
//获取订单容器
public ArrayList<Transaction> getTransactions() {
return transactions;
}
}
CheckingAccount(信用卡)类:
public class CheckingAccount extends Account {
//可借额度
private int borrowableAmount;
//已借额度
private int haveBorrowableAmount;
//构造函数
CheckingAccount(String personName,int carId,int haveBorrowableAmount,int borrowableAmount){
super(personName,carId);
this.haveBorrowableAmount = haveBorrowableAmount;