扩展如下的BankAccount类class BankAccount{
private int balance ;//余额
public BankAccount(double initialBalance) {
this.balance = initialBalance;
}
1/存款
public void deposit(double amount){
balance += amount;
}
//取款
public withdraw(double amount) {
balance -= amount
}
要求:
(1)在上面类的基础上扩展新类CheckingAccount对每次存款和取款都收取1美元的手续费
(2)扩展前一个练习的BankAccount类,新类SavingsAccount每个月都有利息产生
(earnMonthlylnterest方法被调用),并且有每月三次免手续费的存款或取款。在earnMonthlylnterest方法中重置交易计数
(3)体会重写的好处
public class Main {
public static void main(String[] args) {
SavingMoney savingMoney = new SavingMoney(1000);
savingMoney.deposit(12);
savingMoney.deposit(12);
savingMoney.withdraw(30);
System.out.println(savingMoney.getFlag());
System.out.println(savingMoney.getBalance());
savingMoney.earnMoney();
System.out.println(savingMoney.getFlag());
System.out.println(savingMoney.getBalance());
}
}
class BankAccount {
private double balance;//余额
public void deposit(double amount) { //存款
balance += amount;
}
public void withdraw(double amount){
//取款
balance -=amount;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
public BankAccount(int balance) {
this.balance = balance;
}
}
class CheckingAccount extends BankAccount {
public CheckingAccount(int balance) {
super(balance);
}
@Override
public void deposit(double amount) {
super.deposit(amount -1);
}
@Override
public void withdraw(double amount) {
super.withdraw(amount -1);
}
}
class SavingMoney extends BankAccount {
private int flag = 3;//用于计算手续次数
private double rate = 0.01;
public void earnMoney() { //计算每月利息 同时将flag = 3
super.withdraw(this.getBalance() * rate);
flag = 3;
}
@Override
public void deposit(double amount) {
if (flag == 0) {
super.deposit(amount - 1);
}else {
super.deposit(amount);
flag--;
}
}
@Override
public void withdraw(double amount) {
if (flag == 0) {
super.withdraw(amount -1 );
}else {
super.withdraw(amount);
flag--;
}
}
public SavingMoney(int balance) {
super(balance);
}
public int getFlag() {
return flag;
}
public void setFlag(int flag) {
this.flag = flag;
}
public double getRate() {
return rate;
}
public void setRate(double rate) {
this.rate = rate;
}
}