2014-02-07 185 views
0

我正在爲基本模擬銀行系統的類(我們正在使用類中的併發性工作,因此我們需要爲本學期的其餘部分創建主幹)進行分配。我遇到的問題是創建一個名爲Transaction的抽象類,它實現了一系列與不同類型事務相關的不同方法的接口。然後,我們必須爲每種交易類型(即AccountNumberInquiry,AccountBalanceInquiry,AccountWithdrawal等)創建Transaction類的子類。子類,抽象和繼承

我的問題是我在正確的軌道還是我理解這一切都錯了?

Transaction.java

public abstract class Transaction implements TransactionInterface { 
    private Account account; 
    public Transaction(Account account) { 
     this.account = account; 
    } 
} 

TransactionInterface.java

public interface TransactionInterface { 
    public int getAccountNumber(); 
    public void makeTransfer(); 
    public boolean makeWithdrawal(); 
    public double getAccountBalance(); 
    public void makeDeposit(); 
} 

AccountTransfer.java(只是交易的一個例子的子類)

public class AccountTransfer extends Transaction { 

    private Account account; 

    public AccountTransfer(Account account) { 
     super(account); 
     this.account = account; 
    } 

    public void makeTransfer(Account toAccount, double amount) { 
     AccountWithdrawal withdrawal = new AccountWithdrawal(account); 
     if(withdrawal.makeWithdrawl(amount) == true) { 
      // transfer to other account 
     } else { 
      // prompt error 
     } 
    } 

} 

我需要@Override我的AccountTransfer類中的接口方法是否正確?只有一大堆東西令我困惑。

+1

爲什麼你需要兩個'Account'字段?在'Transaction'' protected'中創建一個,並在子類中重新使用它。 –

+0

如果你有一個類,它不是'abstract',實現一個接口或者擴展一個'abstract'類,它需要爲所有繼承的'abstract'方法實現一個實現(包括接口,它們隱含地是'abstract ' –

+0

我想我只是在想這個問題。 – pattmorter

回答

1

從AccountTransfer.java中刪除帳戶的初始化,因爲您可以將創建的帳戶對象傳遞給該類。另外,如前所述,當您將其作爲MVC實現時,受保護將變得非常重要,因爲如果您將它視爲私有,您將無法在模型,視圖和控制器之間進行通信。

乾杯馬特

0

如果你的父類是抽象的,爲什麼你需要使用一個接口?任何在父類中聲明的抽象方法都必須在每個子類中定義。

您可以簡單地將所有這些函數放在類中的接口中,並使這些函數變得抽象。這應該做到這一點。

1

我會建議你問你的老師對Interface Segregation Principle一些不舒服的問題。特別是,getAccountNumber()和getAccountBalance()方法使我與Transaction接口垂直,但該原則規定,不應強制客戶端依賴不使用的方法 - 我認爲Transaction接口爲所顯示的可能不夠好以防止發生這種情況。