Java实验1

笔记总结:

/** 任务81: 继承性,(降低代码亢余度)
 *  1.class 子类A Extends 父类B,(private 的内容无法被继承)
 *  2. 方法可以覆盖(Overrides), 注意权限!
 *  3.在子类中,仅可用 super( ) 调用父类的构造方法和变量,
 *              1.super可以调用父类隐藏的成员变量
 *              2/方法覆盖后,通过super调用父类的方法
 *              3/若方法不覆盖,也可以通过super调用父类的方法
 *  4. this仅可调用本类中的构造方法属性!
 */

编程总结:

1. super(id,balance,annualRate); 需要父类对应的构造方法,接受参数为(id,balance,annualRate)
2.super(),同样需要父类对应的构造方法,接受参数为空
3.父类变量都private了,只能靠方法来调用/查看/修改!

题目要求:

创建Account类的一个子类CheckAccount代表可透支的账户,该账户中定义一个属性overdraft代表可透支限额。在CheckAccount类中重写withdraw方法,其算法如下:
如果(取款金额<账户余额),
可直接取款
如果(取款金额>账户余额),
计算需要透支的额度
判断可透支额overdraft是否足够支付本次透支需要,如果可以
    将账户余额修改为0,冲减可透支金额
如果不可以
    提示用户超过可透支额的限额

要求:写一个用户程序测试CheckAccount类。在用户程序中,创建一个账号为1122、余额为20000、年利率4.5%,可透支限额为5000元的CheckAccount对象。
使用withdraw方法提款5000元,并打印账户余额和可透支额。
再使用withdraw方法提款18000元,并打印账户余额和可透支额。
再使用withdraw方法提款3000元,并打印账户余额和可透支额。

编程实现:

1/实现Account.java

public class Account {
    private int id;
    private double balance;
    private double annualRate;
  //  public Account(){}
    public Account(int id,double balance,double annualRate){
        this.id=id;
        this.balance=balance;
        this.annualRate=annualRate;
    }
    public int getId() {
        return id;
    }
    public double getBalance() {
        return balance;
    }
    public double getAnnualRate() {
        return annualRate;
    }
    public void setId(int id) {
        this.id = id;
    }
    public void setAnnualRate(double annualRate) {
        this.annualRate = annualRate;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }
    public void withdraw(double amount){  //取钱
        if(amount>this.balance){
            System.out.println("余额不足");
        }
        else{
            this.balance-=amount;
        }
    }
    public void deposit(double amount){  //存钱
        this.balance+=amount;
    }
}
class CheckAccount extends Account{
    private double overdraft;
    public CheckAccount(int id,double balance,double annualRate,double t){
        super(id,balance,annualRate);
        this.overdraft=t;
    }
    public void showinfo(){
        System.out.println("您的余额:"+this.getBalance()+"	"+
                "您的可透支余额:"+this.overdraft);
    }
    public void withdraw(double amt){
        if(amt<=super.getBalance())
            super.setBalance(super.getBalance()-amt );
        else{
            double val=amt-super.getBalance();
            if(val<=this.overdraft)
            {
                super.setBalance(0);
                this.overdraft-=val;
            }
            else
                System.out.println("该消费超过可透支额的限额");
        }
    }
}

2.实现Test.java (测试类)

import java.lang.*;
import static java.lang.System.*;

public class Test{
    public static void main(String[] args) {
        //创建一个测试account
        Account a=new Account(1122,20000,0.045);
        a.withdraw(3000);
        System.out.println("账户余额: "+a.getBalance());

        a.withdraw(2500);
        a.deposit(3000);
     //   System.out.println("账户余额: "+a.getBalance());
      //  System.out.println("月利率: "+a.getAnnualRate());

        //创建一个测试CheckAccount类
        CheckAccount c=new CheckAccount(1122,20000,0.045,5000);

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

测试结果:

账户余额: 17000.0
您的余额:15000.0    您的可透支余额:5000.0
您的余额:0.0    您的可透支余额:2000.0
该消费超过可透支额的限额
您的余额:0.0    您的可透支余额:2000.0
你不逼自己一把,你永远都不知道自己有多优秀!只有经历了一些事,你才会懂得好好珍惜眼前的时光!
原文地址:https://www.cnblogs.com/zhazhaacmer/p/9768836.html