主要在于CheckAccount类里重写取款方法一项出错,观察了很久没有找到错在哪里,看了视频原来是第三个if那里先将balance归0了又进行的与balance有关的操作
@Override
public void withdraw(double amount) {
if (amount>0){
if (amount>(overdraft+getBalance())){
System.out.println("额度不足");
}else{
if (amount>getBalance()){
setOverdraft(getOverdraft()+getBalance()-amount);
setBalance(0);//要注意本行和上一行的代码顺序,必须先进行balance的运算再将balance归0
}else{
setBalance(getBalance()-amount);
}
}
}else{
System.out.println("您的输入有误");
}
}
完整代码:
package com.jicheng.test4;
//账户类
public class Account {
private int id;//id
private double balance;//余额
private double annualInterestRate;//年利率
//空参构造器
public Account() {
}
//有参构造器
public Account(int id, double balance, double annualInterestRate) {
this.id = id;
this.balance = balance;
this.annualInterestRate = annualInterestRate;
}
//返回月利率的方法
public double getMonthlyInterest(){
return annualInterestRate/12;
}
//取款方法
public void withdraw(double amount){
if (amount>0&&amount<=balance){
balance-=amount;
}else{
System.out.println("取款失败");
}
}
//存款方法
public void deposit(double amount){
if (amount>0){
balance+=amount;
}else{
System.out.println("存款失败");
}
}
//获取id
public int getId() {
return id;
}
//修改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;
}
}
package com.jicheng.test4;
//可透支的账户
public class CheckAccount extends Account {
private double overdraft;//透支金额
//空参构造器
public CheckAccount() {
}
//重写有参构造器方法,加入可透支额度
public CheckAccount(int id, double balance, double annualInterestRate,double overdraft) {
this.setBalance(balance);
this.setAnnualInterestRate(annualInterestRate);
this.setId(id);
this.overdraft=overdraft;
}
//重写取款方法
@Override
public void withdraw(double amount) {
if (amount>0){
if (amount>(overdraft+getBalance())){
System.out.println("额度不足");
}else{
if (amount>getBalance()){
setOverdraft(getOverdraft()+getBalance()-amount);
setBalance(0);//要注意本行和上一行的代码顺序,必须先进行balance的运算再将balance归0
}else{
setBalance(getBalance()-amount);
}
}
}else{
System.out.println("您的输入有误");
}
}
//获取可透支金额
public double getOverdraft() {
return overdraft;
}
//修改可透支金额
public void setOverdraft(double overdraft) {
this.overdraft = overdraft;
}
}
package com.jicheng.test4;
public class AccountTest {
public static void main(String[] args) {
CheckAccount checkAccount=new CheckAccount(1132,20000,0.045,20000);
checkAccount.withdraw(30000);//提款30000
System.out.println("余额"+checkAccount.getBalance());//获取余额
System.out.println("剩余透支额度"+checkAccount.getOverdraft());//获取透支额度
checkAccount.withdraw(2500);//提款2500
System.out.println("余额"+checkAccount.getBalance());//获取余额
System.out.println("剩余透支额度"+checkAccount.getOverdraft());//获取透支额度
checkAccount.deposit(3000);//存款3000
System.out.println("余额"+checkAccount.getBalance());//获取余额
System.out.println("剩余透支额度"+checkAccount.getOverdraft());//获取透支额度
}
}