// Accounts example -- Lowis & Loftus, 1st edition, page 302. class SavingsAccount { protected int account; protected double balance; protected double rate; public SavingsAccount (int accountNum, double initBalance, double intRate) { account = accountNum; balance = initBalance; rate = intRate; } public void deposit (double amount) { balance += amount; System.out.println ("Deposit into account " + account); System.out.println ("Amount: " + amount); System.out.println ("New balance: " + balance); System.out.println(); } public boolean withdrawal (double amount) { boolean result = false; System.out.println ("Withdrawal from account " + account); System.out.println ("Amount: " + amount); if (amount > balance) System.out.println ("Insufficient funds."); else { balance -=amount; System.out.println ("New balance: " + balance); result = true; } System.out.println(); return result; } public void addInterest () { balance += balance * rate; System.out.println ("Interest added to account " + account); System.out.println ("New balance: " + balance); System.out.println(); } } class BonusSaver extends SavingsAccount { private final int PENALTY = 25; private final double BONUS_RATE = 0.03; public BonusSaver (int accountNum, double initBalance, double intRate) { super (accountNum, initBalance, intRate); } public boolean withdrawal (double amount) { System.out.println ("Penalty incurred: " + PENALTY); return super.withdrawal (amount + PENALTY); } public void addInterest () { balance += balance * (rate + BONUS_RATE); System.out.println ("Interest added to account " + account); System.out.println ("New balance: " + balance); System.out.println(); } } class Accounts { public static void main (String[] args) { SavingsAccount savings = new SavingsAccount (4321, 8921.39, 0.02); BonusSaver bigSavings = new BonusSaver (6543, 1234.00, 0.02); savings.addInterest(); bigSavings.addInterest(); savings.deposit (456.09); bigSavings.deposit (456.09); savings.withdrawal (555.99); bigSavings.withdrawal (666.88); } }