一、代码实现
(一)储蓄卡类
(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());
}
}二、测试结果

测试OK,代码OK。
















