面向对象(中) 实验 类的继承,super

1 、写一个名为 Account 的类模拟账户。该类的属性和方法如下图所示。该类包括的属性:
账号 id ,余额 balance ,年利率 annualInterestRate ;包含的方法:访问器方法( getter
setter 方法),返回月利率的方法 getMonthlyInterest() ,取款方法 withdraw() ,存款方法
deposit()
写一个用户程序测试 Account 类。在用户程序中,创建一个账号为 1122 、余额为 20000
年利率 4.5% Account 对象。使用 withdraw 方法提款 30000 元,并打印余额。
再使用 withdraw 方法提款 2500 元,使用 deposit 方法存款 3000 元,然后打印余额和月利
率。
 
2 、创建 Account 类的一个子类 CheckAccount 代表可透支的账户,该账户中定义一个属性
overdraft 代表可透支限额。在 CheckAccount 类中重写 withdraw 方法,其算法如下:
如果(取款金额 < 账户余额),
可直接取款
如果(取款金额 > 账户余额),
计算需要透支的额度
判断可透支额 overdraft 是否足够支付本次透支需要,如果可以
将账户余额修改为 0 ,冲减可透支金额
如果不可以
提示用户超过可透支额的限额
要求: 写一个用户程序测试 CheckAccount 类。在用户程序中,创建一个账号为 1122 、余
额为 20000 、年利率 4.5% ,可透支限额为 5000 元的 CheckAccount 对象。
使用 withdraw 方法提款 5000 元,并打印账户余额和可透支额。
再使用 withdraw 方法提款 18000 元,并打印账户余额和可透支额。
再使用 withdraw 方法提款 3000 元,并打印账户余额和可透支额。
提示:
1 ) 子类 CheckAccount 的构造方法需要将从父类继承的 3 个属性和子类自己的属性全
部初始化。
2 ) 父类 Account 的属性 balance 被设置为 private ,但在子类 CheckAccount withdraw
方法中需要修改它的值,因此应修改父类的 balance 属性,定义其为 protected
 
答:
import java.util.Scanner;
public class Customer {
    private String firstName;
    private String lastName;
    private Account account;

    public Customer(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public Account getAccount() {
        return account;
    }

    public void setAccount(Account account) {
        this.account = account;
    }

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        Customer c=new Customer("Jane","Smith");
        c.account=new CheckAccount(1122,20000,0.045,5000);

        c.account.withdraw(5000);
        c.account.withdraw(18000);
        c.account.withdraw(3000);
    }

}

class CheckAccount extends Account{
    private int overdraft;

    public CheckAccount(int id, double balance, double annualInterestRate,int overdraft) {
        super(id, balance, annualInterestRate);
        this.overdraft = overdraft;
    }
    public void withdraw(double amount){
        if (balance-amount<=0){
            if (amount-balance<overdraft){
                overdraft-=(amount-balance);
                balance=0;
                System.out.println("取款"+amount+"成功!");
                System.out.println("余额:"+balance);
                System.out.println("可透支额度:"+overdraft);
                System.out.println();
            }
            else {
                System.out.println("取款"+amount+"失败!");
                System.out.println("超过可透支额度!");
                System.out.println("余额:"+balance);
                System.out.println("可透支额度:"+overdraft);
                System.out.println();

            }
        }
        else {
            balance-=amount;
            System.out.println("取款"+amount+"成功!");
            System.out.println("余额为:"+balance);
            System.out.println("可透支额度:"+overdraft);
            System.out.println();
        }
    }

}

 class Account {
     protected int id;
     protected double balance;
     protected double annualInterestRate;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    public double getAnnualInterestRate() {
        return annualInterestRate;
    }

    public void setAnnualInterestRate(double annualInterestRate) {
        this.annualInterestRate = annualInterestRate;
    }

    public  Account(){}
    public Account(int id, double balance, double annualInterestRate) {
        this.id = id;
        this.balance = balance;
        this.annualInterestRate = annualInterestRate;
    }
    public void withdraw (double amount){
        if (balance-amount<0){
            System.out.println("余额不足!取款失败!");
            System.out.println("余额为:"+balance);
        }
        else {
            balance-=amount;
            System.out.println("取款"+amount+"成功!");
            System.out.println("余额为:"+balance);
        }
    }
    public void deposit (double amount){
        balance+=amount;
        System.out.println("存款"+amount+"成功!");
        System.out.println("余额为:"+balance);
    }


}
取款5000.0成功!
余额为:15000.0
可透支额度:5000

取款18000.0成功!
余额:0.0
可透支额度:2000

取款3000.0失败!
超过可透支额度!
余额:0.0
可透支额度:2000

猜你喜欢

转载自blog.csdn.net/qq_41048982/article/details/109359500
今日推荐