使用继承创建一个父类Account,该父类具有两个名为SavingsAccount 和 CheckingAccount的子类。
在Account类中使用参数化构造方法初始化两个属性:name(姓名)和balance(余额)。声明方法以返回这些属性中存储的值。属性balance应该根据发生的交易而更新。SavingsAccount类应该具有附加属性 interestRate(利率)和参数化构造方法以初始化这些属性。
CheckingAccount类具有附加属性 overDraft(可透支金额)。该类应该具有两个参数化构造方法,一个用于接受两个参数(以初始化父类的name和balance属性),另一个用于接受3个参数以初始化所有3个成员。提款时应该执行下列检查:
1.如果要提取的amount小于balance,那么交易继续进行。
2.如果amount大于balance且大于balance和overDraft金额的和,那么交易应该被取消。
3.如果amount大于balance且小于balance和overDraft金额的和,那么balance的值应该变为0,overDraft金额的值应该足以支付balance和amount之间的差。
题目要求是:编写测试类,显示用户John,初始余额为500.0,利率为0.04,存款200.0,取款200.0的过程的相关信息。
现实用户Stephen,初始余额为200.0,存款200.0可用透支金额为300.0,取款500.0的过程的相关信息。要求得出的结果如下:
储蓄帐户详细信息:
-----------------------
John初始余额为:500.0
存款:200.0
取款:200.0
John交易后的余额为:500.0支票帐户详细信息:
------------------------
Stephen初始余额为:200.0
存款:200.0
可透支金额:300.0
取款:500.0
Stephen交易后的余额为:0.0各位帮忙解决一下。我自己也做了一个代码,勉强实现了这个功能,但是觉得写的很不好。希望大家交流一下

解决方案 »

  1.   

    我自己的代码是这样写的。虽然基本实现了功能,但是我很不满意,却又一时想不到又什么好方法。
    大家帮忙看一下吧/*
    两个对象: John,Stephen。
    John的属性:name,balance,amount,interestRate
    Stephen的属性:name,balance,amount,overDraft,interestRate两个动作:
    1.存钱
    2.取钱
    */
    abstract class Account
    {
    String name;//姓名
    float balance;//余额
    float amountout;//取出的钱数
    float amountin;//存进的钱数

    //构造方法
    Account()
    {}
    //构造方法重载,传4个参数
    Account(String name1,float balance1,float amountin1,float amountout1)

    name = name1;
    balance = balance1;
    amountin = amountin1;
    amountout = amountout1;

    }

    //我并不满意的一个 abstract 方法
    abstract void atm();

    }/*
    SavingsAccount类
    */
    class  SavingsAccount extends Account
    {
    float interestRate = 0.04f;//附加属性

    SavingsAccount()
    {}

    //构造方法重载
    SavingsAccount(String name , float balance ,float amountin1,float amountout1)
    {
    super(name,balance,amountin1,amountout1);
    }

    //子类重写atm()方法
    void atm()
    {
    System.out.println("储蓄帐户详细信息:");
    System.out.println(name+"'s premier balance is:"+balance);
      System.out.println("saveing is "+amountin);
    System.out.println("take out "+amountout); 
    balance = balance + amountin-amountout;
    System.out.println(name+"'s balance is: "+balance);
    }
    }
    /*
    CheckingAccount类
    */
    class CheckingAccount extends Account
    {
    float overDraft;//附加属性
    CheckingAccount()
    {}

    //构造方法重载,传5个参数。参数太多,我不满意的地方。
    CheckingAccount(String name ,float balance,float amountin1,float amountout1,float overDraft2)
    {
    super(name,balance,amountin1,amountout1);
    overDraft = overDraft2;
    }

    //重写atm()方法
    void atm()
    {
    System.out.println("credit account's details");
    System.out.println(name+"'s premier balance is:"+balance);
    System.out.println("the saveing is :"+amountin);
    System.out.println("overDaft is "+overDraft);
    balance = balance +amountin;

    if (amountout < balance)
    {
    balance -=amountout;
    System.out.println("交易余额为:"+balance);
    }
    else if(amountout>balance&&amountout>(overDraft+balance))
    {
    System.out.println("您资金不够无法完成交易");
    }
    else
    {
    System.out.println("当前透支金额为:"+(amountout-balance));
    balance = 0;
    System.out.println(name+"'s balance is "+balance);
    }
    }
    }//测试类
    class AccountTest
    {
    AccountTest()
    {}
    public static void main(String[] args)
    {

    SavingsAccount sa = new SavingsAccount("John",500,200,200);
    sa.atm();
    System.out.println("**********************************");
    CheckingAccount ca = new CheckingAccount("Stephen",200,200,500,300);
    ca.atm();
    }
    }
      

  2.   

    1 你的应用决定了你的类的方法,如果你的应用就是需要10个参数,那也没办法
    2 如果你讨厌那么长的构造器参数,你可以
    SavingsAccount o = new SavingsAccount();
    o.setName(name);
    o.setBalance(balance);这样更常见,但有风险,你可能忘了初始化某个必要的参数,而构造器则不会。
      

  3.   

    改了一下,应该能让你满意/**
    Account 2个属性name,balance
    两个动作:
    1.存钱
    2.取钱
    */
    abstract class Account
    {
        String name;//姓名
        float balance;//余额
       
        
        //构造方法
        Account()
        {}
        //构造方法重载,传2个参数
        Account(String name1,float balance1)
        { 
            name = name1;
            balance = balance1;
           
        
        }
        
        
        abstract void atm(float amountin,float amountout);
        
    }/*
    SavingsAccount类
    处理储蓄帐户
    */
    class  SavingsAccount extends Account
    {
        float interestRate = 0.04f;//附加属性 利率
        
        SavingsAccount()
        {}
        
        //构造方法重载
        SavingsAccount(String name , float balance)
        {
            super(name,balance);
        }
        
        //子类重写atm()方法
        void atm(float amountin,float amountout)
        {
            System.out.println("储蓄帐户详细信息:");
            System.out.println(name+"'s premier balance is:"+balance);
            System.out.println("saveing is "+amountin);
            System.out.println("take out "+amountout); 
            balance = balance + amountin-amountout;
            System.out.println(name+"'s balance is: "+balance);
        }
    }
    /*
    CheckingAccount类
    处理信用帐户
    */
    class CheckingAccount extends Account
    {
        float overDraft;//附加属性
        CheckingAccount()
        {}
        
        //构造方法重载,传3个参数
        CheckingAccount(String name ,float balance,float overDraft2)
        {
            super(name,balance);
            overDraft = overDraft2;
        }
        
        //重写atm()方法
        void atm(float amountin,float amountout)
        {
            System.out.println("credit account's details");
            System.out.println(name+"'s premier balance is:"+balance);
            System.out.println("the saveing is :"+amountin);
            System.out.println("overDaft is "+overDraft);
            balance = balance +amountin;
            
            if (amountout < balance)
            {
                balance -=amountout;
                System.out.println("交易余额为:"+balance);
            }
            else if(amountout>balance&&amountout>(overDraft+balance))
            {
                System.out.println("您资金不够无法完成交易");
            }
            else
            {            
                System.out.println("当前透支金额为:"+(amountout-balance));
                balance = 0;
                System.out.println(name+"'s balance is "+balance);
            }
        }
    }//测试类
    class AccountTest
    {
        AccountTest()
        {}
        public static void main(String[] args)
        {
            
            SavingsAccount sa = new SavingsAccount("John",500);
            sa.atm(200,200);
            System.out.println("**********************************");
            CheckingAccount ca = new CheckingAccount("Stephen",200,300);
            ca.atm(200,500);
        }
    }