一、代码实现

(一)储蓄卡类

(1)成员属性(使用“private”进行封装):

①账户(id)

②余额(balance)

(2)成员方法:

①属性的Getter 与Setter方法的快速产生可使用快捷键“Alt+Insert

②取款:public void withdraw(double money)

③存款:public void save(double money)

④详细信息:public String getInfo()


/*
Date by 2022.7.23
储蓄卡类
 */
public class DepositCard {
    //成员变量
    private String id;
    private double balance;

    public String getId() {
        return id;
    }

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

    public double getBalance() {
        return balance;
    }

    //成员方法
    //取款
    public void withdraw(double money){
        //异常判断1:如果取款的值为负数
        if( money < 0){
            System.out.println("取款不能为负数");
            return;
        }
        //异常判断2:取款金额大于余额
        if( money > balance){
            System.out.println("余额不足");
            return;
        }
        //正常取款
        balance -= money;

    }
    //存款
    public void save(double money){
        //异常判断:输入的是负数
        if(money < 0){
            System.out.println("存款金额不能为负");
            return;
        }
        //余额增加
        balance += money ;
    }
    //详细信息
    public String getInfo(){
        return "账号:" + id + ",余额:" + balance;
    }
}

(二) 信用卡类

(1)继承 (使用关键字“extends”)

信用卡类继承储蓄卡类

①信用卡类 为父类,也称为“基类”;储蓄卡类 为子类,也称为“派生类”。

②如果要重写父类的方法,光标定位到要插入的地方,使用快捷键“Ctrl+O”。在方法的声明中关键字“super”是指调用父类的方法。

③“重写”与“重载”的区别:

 “重写”:是指子类继承父类的方法后,对父类方法函数体的重新编写。函数头不变,变的是函数体。

 “重载”:是指允许有多个同名的函数名称功能类似而参数不同的函数。参数的数据类型与个数可以不同。

(2)成员属性:

①本月可透支总额度(totalOverdraft)

②本月已透支的额度(overdraft)

(3)成员方法:(继承父类,方法进行重写)

①Getter与Setter方法

②存款:public void save(double money)

③取款:public void withdraw(double money)

④详细信息:public String getInfo()


/*
Date by 2022.7.23
信用卡类:继承储蓄卡类
 */
public class CreditCard extends DepositCard {
    //成员变量
    private double totalOverdraft;//本月可透支总额度
    private double overdraft;//本月已透支的额度

    public double getTotalOverdraft() {
        return totalOverdraft;
    }

    public void setTotalOverdraft(double totalOverdraft) {
        this.totalOverdraft = totalOverdraft;
    }

    public double getOverdraft() {
        return overdraft;
    }

    //方法的重写
    @Override
    //取款
    public void withdraw(double money) {
        //情况1:取款金额超过账户余额 + 本月可透支额度,提示超过可透支额度
        //本月可透支额度
        double amount = totalOverdraft - overdraft;
        if(money > getBalance() + amount){
            System.out.println("超过可透支额度");
            return;//结束语句
        }
        //情况2:取款金额在账户余额范围内,不用透支
        if(money <= getBalance()){
            super.withdraw(money);//使用父类的取款方式
            return;//结束语句
        }
        //情况3:取款金额超过账户余额但在可透支范围内
        //此时,余额已全部取出
        super.withdraw(getBalance());
        //从可透支部分取出剩下需要的money
        overdraft += money - getBalance();

    }

    @Override
    //存款
    public void save(double money) {
        //异常判断:存款为负数
        if(money < 0){
            System.out.println("存款金额不能为负数");
            return;
        }
        //情况1:存款金额只够偿还已透支金额
        if(money < overdraft){
            overdraft -= money;
            return;
        }
        //情况2:本次存款金额除了偿还透支金额,还有剩余

        super.save(money-overdraft);
        overdraft = 0;//偿还透支金额后,本月已透支金额设置为0
    }


    //得到详细信息
    public String getInfo(){
        return super.getInfo() + ",本月可透支额度:" + totalOverdraft + ",本月已透支额度:" +overdraft;
    }
}

(三)测试类

(1)首先创建两个类的对象,用于调用类的方法。

(2)之后为对象的属性进行赋值。调用对象的方法。

(3)测试特殊值,查看代码是否有误


//Date by 2022.7.23
public class TestCard {
    public static void main(String[] args) {
        //测试储存卡类、信用卡类
        //先创建两个类的对象
        DepositCard d = new DepositCard();
        CreditCard c = new CreditCard();
        System.out.println("储蓄卡测试");
        d.setId("66666");
        d.save(500);
        System.out.println(d.getInfo());
        d.withdraw(-600);
        System.out.println(d.getInfo());
        System.out.println("----------------------");
        System.out.println("信用卡测试");
        c.setId("77777777");
        c.setTotalOverdraft(2000);
        c.save(-500);
        System.out.println(c.getInfo());
        c.withdraw(1500);
        System.out.println(c.getInfo());
        c.save(600);
        System.out.println(c.getInfo());
    }
}

二、测试结果

JAVA保持会话状态 java如何实现保存功能_java

测试OK,代码OK。