2014-02-07 186 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接口为所显示的可能不够好以防止发生这种情况。