了解继承和不同的类

时间:2016-01-28 03:17:09

标签: java class inheritance

我正在搞乱继承,并对如何做一些不同的事情感到困惑。这就是我所拥有的:

查看Account类并在另一个类Bank中编写main方法,以简要介绍Account类的一些实例。

  1. 使用Account类作为基类,编写两个名为SavingsAccount和CheckingAccount的派生类。除Account对象的属性外,SavingsAccount对象还应具有兴趣变量和增加帐户兴趣的方法。除Account对象的实例变量外,CheckingAccount对象应具有透支限制变量。确保在两个派生类中都根据需要重写了Account类的方法。

  2. 现在创建一个Bank类,其对象包含一个Account对象数组。数组中的帐户可以是Account类,SavingsAccount类或CheckingAccount类的实例。创建一些测试帐户(每种类型的一些)。

  3. 在银行类中编写更新方法。它遍历每个帐户,并通过以下方式更新它:储蓄帐户获得兴趣(通过您已经写过的方法);支票账户如果透支则会收到一封信。

  4. public class Account {
    
        private double balance; 
        private int acctNum; 
    
        public Account (int num)
        { 
            balance = 0.0;
            acctNum = num; 
        } 
        public void deposit (double amt)
        { 
            if (amt >0)
                balance +=amt;
            else 
                System.out.println("Account.deposit(...): "
                        +"cannot deposit negative amount.");
        }
        public void withdraw (double amt)
        {
            if (amt>0)
                balance -=amt; 
            else 
                System.err.println("Account.withdraw(...): "
                        +"cannot withdraw negative amount.");
    
        }
        public double getBalance() 
        { 
            return balance; 
        }
        public double getAccountNumber()
        {
            return acctNum;
        }
        public String toString()
        {
          return "Acc " + acctNum + ": " + "balance = "+ balance;   
        }
        public final void print()
        {
               System.out.println( toString()); 
        }
    
    }
    

    现在是SavingsAccount

    public class SavingsAccount extends Account { 
        private double interest;
    
        public SavingsAccount(int acctNum, double interest) {
            super(acctNum);
            this.interest=interest;
        }
    
        public double getInterest() { 
            double x= getBalance() + getBalance()*interest;
            return x;
    
        // public void setInterest((interest))
        // this.interest=interest;
        }
        public void AddInterest (double interest) { 
            double x = super.getBalance() * interest; 
            super.deposit(x);
        }
        public String toString() {
            return super.toString()+" Interest : " + interest; 
        }
    }
    

    的CheckingAccount

    public class CheckingAccount extends Account {
        private double limit; 
    
        public CheckingAccount(int acctNum, double limit) {
            super(acctNum);
            this.limit=limit;
        }
    
        public double getLimit() {
            return this.limit;
        }
    
        public void setLimit(double limit) { 
            this.limit=limit; 
        }
        public void withdraw (double limit) { 
            if (limit <= this.limit)
                super.withdraw(limit);
            else { 
                System.out.println(" Sorry, Limit Exceeded" );
            }
    
        }
    
    
        public String toString() { 
            return super.toString() +"Limit :   "+limit; 
        }
    }
    

    银行班

    public class Bank {
    
        public static void main(String[] args) {
            Account[] accounts = new Account[2];
            accounts[0] = new SavingsAccount(2, 0.25);
            accounts[1] = new CheckingAccount(23, 50);
    
            for(int i=0; i<accounts.length;i++) {
                if (accounts[0].equals(SavingsAccount)
                    System.out.println(accounts[0].getInterest());
            }
        }
    

    所以这是我注意到的问题。

    1. 在SavingsAccount中,我不知道如何让setInterest()工作。我已经尝试将其更改为int,但随后更改了Account类。如何让它正常工作?

    2. 在银行班 - 我写的for循环。它没有用,我试过if(accounts [i] .equals如此,但似乎没有正常运作。正确的方法是什么?

    3. 同样,我假设一切都来自我的SavingsAccount类。

1 个答案:

答案 0 :(得分:0)

如果我了解您在for循环中尝试执行的操作,则需要使用instanceof来检查课程,而不是equals()

所以,例如

Account[] accounts = new Account[2];
accounts[0] = new SavingsAccount(2, 0.25);
accounts[1] = new CheckingAccount(23, 50);

for(int i=0; i<accounts.length;i++) {
    if (accounts[i] instanceof SavingsAccount) {
        // You must cast an Account to use any of the descendant's methods
        SavingsAccount account = (SavingsAccount) accounts[i];
        System.out.println(account.getInterest());
    } else { // it's a CheckingAccount

    } 
}

除此之外,StackOverflow不是您转发作业要求的地方,所以您的问题在完成时回答过于宽泛。