笔记总结:
/** 任务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