- 前言
- 一、任务介绍
- 1.任务描述
- 2.运行结果
- 3.任务目标
- 二、程序实现
- 1.代码
- 2.实验结果(包括测试类和输出结果)
- 三、总结
1.写一个抽象类:账户类(Account)
包含属性: id:账户号码 name:账户姓名 balance:账户余额
deposit: 存款方法,参数是double型的金额,要求不允许子类修改
withdraw取款方法,参数是double型的金额,抽象方法,具体取款操作在两个子类中分别实现
包含的构造方法:无参数构造方法:用于子类调用
有参构造方法:用于设置必要的属性
2.写一个子类储蓄账户(SavingAccount)继承抽象类Account
实现抽象方法withdraw,储蓄账户不允许透支,在取款发生余额不足的情况下要产生BalanceNotEnoughException
3.写一个子类信用账户(CreditAccount)继承抽象类Account
增加属性 ceiling 透支额度,可以透支,并允许设置透支额度.实现抽象方法withdraw,在取款发生超过透支额度的情况下要产生OverDraftNotEnoughException
4. 写出异常类: BalanceNotEnoughException :用于取钱的时候余额不足的异常情况(继承父类Exception),新增一个成员变量String message,写一个有参构造方法用于构造异常对象,构建异常信息message,然后再新增一个warnMessage方法,用于返回message.
OverDraftNotEnoughException:用于取钱时超过透支额度的异常情况(继承父类Exception)新增一个成员变量String message,写一个有参构造方法用于构造异常对象,构建异常信息message,然后再新增一个warnMess方法,用于返回message.
5.写一个测试类TestAccount对各操作进行测试,并对产生多种异常进行分别处理,输出各自的异常信息。参考代码如下:
public class TestAccount{
public static void main(String args[]) {
SavingAccount savingAccount=new SavingAccount("0011988938","小王",1000);
CreditAccount creditAccount=new CreditAccount("1248998989","小王",2000,1000);
try{
savingAccount.withdraw(500);
savingAccount.withdraw(600);
}
catch(BanlanceNotEnoughException e){
System.out.println("取款过程中发生余额不足异常:");
System.out.println(e.warnMess());
}
try{
creditAccount.withdraw(1000);
creditAccount.withdraw(1500);
creditAccount.deposit(200);
creditAccount.withdraw(600);
creditAccount.withdraw(200)
}
catch(OverDraftNotEnoughException e){
System.out.println("取款过程中发现透支额度不足异常:");
System.out.println(e.warnMess());
}
}
}
2.运行结果
3.任务目标
进步掌握具体子类重写(覆盖、实现)抽象父类中的方法。
独立完成“银行抽象类的设计和自定义异常类的”的源代码编写、编译及运行。
掌握自定义异常类的应用。
(请分别定义好一个抽象的父类和两个具体的子类以及两个自定义异常类)
1.代码abstract class BankAccount {
public String id;//账户号码
public String name;//账户姓名
public double balance;//账户余额
public final void deposit(double money)//不允许子类修改的存款方法
{
balance+=money;
}
public abstract void withdraw(double money) throws OverDraftNotEnoughException,BalanceNotEnoughException;//在子类中实现取款
public BankAccount(String name, String id, double balance) {
this.name = name;
this.id = id;
this.balance = balance;
}
public String getName()
{
return name ;
}
public void setName(String name)
{
this.name = name ;
}
public String getID()
{
return id ;
}
public void setID(String id)
{
this.id = id;
}
public double getBalance()
{
return balance ;
}
}
//第一个子类,实现储蓄银行卡
class SavingAccount extends BankAccount{
public SavingAccount(String name, String id, double balance) {
super(name, id, balance);
}
@Override
public void withdraw(double money) throws BalanceNotEnoughException{
if(balance>=money)balance-=money;
else{
throw new BalanceNotEnoughException("当前的余额为:"+balance+"无法支取"+money+"元!");
}
}
}
//第二个子类,实现信用银行卡
class CreditAccount extends BankAccount{
private double ceiling;
public CreditAccount (String name, String id, double balance, double ceiling) {
super(name, id, balance);
this.ceiling=ceiling;
}
@Override
public void withdraw(double money) throws OverDraftNotEnoughException {
if(balance+ceiling>=money) {
if(balance>=money)balance -= money;
else{
balance -= money;
ceiling+=balance;
}
}
else throw new OverDraftNotEnoughException("当前的余额为:"+balance+"透支额度"+ceiling+"元,无法支取"+money+"元!");
}
}
//第一个异常类,用于取钱的时候余额不足的异常情况
class BalanceNotEnoughException extends Exception{
private String message;
public BalanceNotEnoughException(String message)
{
this.message = message;
}
public String warnMess()
{
return message;
}
}
//第二个异常类,用于取钱时超过透支额度的异常情况
class OverDraftNotEnoughException extends Exception{
private String message;
public OverDraftNotEnoughException(String message)
{
this.message = message;
}
public String warnMess()
{
return message;
}
}
//测试类
public class TestAccount{
public static void main(String args[]) {
SavingAccount savingAccount=new SavingAccount("0011988938","小王",1000);
CreditAccount creditAccount=new CreditAccount("1248998989","小王",2000,1000);
try{
savingAccount.withdraw(500);
savingAccount.withdraw(600);
}
catch(BalanceNotEnoughException e){
System.out.println("取款过程中发生余额不足异常:");
System.out.println(e.warnMess());
}
try{
creditAccount.withdraw(1000);
creditAccount.withdraw(1500);
creditAccount.deposit(200);
creditAccount.withdraw(600);
creditAccount.withdraw(200);
}
catch(OverDraftNotEnoughException e){
System.out.println("取款过程中发现透支额度不足异常:");
System.out.println(e.warnMess());
}
}
}
2.实验结果(包括测试类和输出结果)
测试类:
结果:
有细心的朋友可能发现,我做出来的结果跟题目要求的不太一样,这是为什么呢?其实是因为我理解的透支额度跟老师理解的不一样,老师写的透支额度的意思是有个透支的定值,每次取钱就算卡里没钱只要没超过额度始终都能取出。我想着是类似于一个变值,我(银行)最多能借出去这么多除非你还我钱了我才能接着借,所以透支额度是在减小的。这里的观念不一样所以导致了最终做出来的结果有了不同,不过不要紧,理论上是对的就行。毕竟这个实验的目的主要是练习自定义异常类。



