2016-01-28 77 views
0

我搞砸了繼承和混淆瞭如何做一些不同的事情。以下是我的:瞭解繼承和不同的類

查看Account類並在不同類Bank中編寫一個主要方法以簡要介紹一些Account類的實例。

  1. 使用Account類作爲基類,編寫兩個名爲SavingsAccount和CheckingAccount的派生類。 SavingsAccount對象除了Account對象的屬性之外,還應該有一個利息變量和一個可以增加賬戶利息的方法。 CheckingAccount對象除了Account對象的實例變量外,還應該有一個透支限制變量。確保您在派生類中必要時重寫了Account類的方法。

  2. 現在創建一個Bank類,其中的一個對象包含一個Account對象數組。數組中的帳戶可以是Account類,SavingsAccount類或CheckingAccount類的實例。創建一些測試帳戶(每種類型的一些)。

  3. 在銀行類中編寫更新方法。它遍歷每個帳戶,並通過以下方式進行更新:儲蓄帳戶獲得了興趣(通過您已寫入的方法);如果帳戶處於透支狀態,支票帳戶將收到一封信。

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循環。它不工作,我都試過,如果(帳戶[I] .equals如此如此,但似乎並沒有正常工作。什麼是正確的方法是什麼?

同時,我假設一切是從哪裏來的我SavingsAccount類。

+0

您還沒有爲'Account'實施'equals'方法,因此'accounts [i] .equals'不應該起作用。 –

+0

你可以交替使用'CurrentAccount'和'CheckingAccount'嗎? –

+0

除此之外,「它不起作用」不是很具體。 *它做了什麼*以及你想要做什麼。用你的問題解釋一下[編輯](http://stackoverflow.com/posts/35052243/edit)。 –

回答

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不是一個給你轉儲作業需求的地方,所以你的問題過於寬泛,需要在完成時回答。