子类,抽象和继承

时间:2014-02-07 02:57:29

标签: java inheritance abstraction

我正在为一个基本上模拟银行系统的类工作(我们正在使用类中的并发性,所以我们需要为本学期剩下的时间做主干)。我遇到的问题是创建一个名为Transaction的抽象类,它实现了一系列与不同类型的事务相关的不同方法的接口。然后我们必须为每种类型的事务创建Transaction类的子类(即AccountNumberInquiry,AccountBalanceInquiry,AccountWithdrawal等)。

我的问题是我走在正确的轨道上还是我明白这一切都错了?

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 (只是Transaction的一个示例子类)

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类中的接口方法是否正确?只有很多东西让我感到困惑。

3 个答案:

答案 0 :(得分:1)

从AccountTransfer.java中删除帐户的初始化,因为您可以将创建的帐户对象传递给该类。此外,如上所述,当您将其实现为MVC时,受保护将变得非常重要,因为如果您将模型,视图和控制器设置为私有,则无法在模型,视图和控制器之间进行通信。

干杯马特

答案 1 :(得分:1)

我打算建议你向教练询问一些关于Interface Segregation Principle的不舒服的问题。特别是,getAccountNumber()和getAccountBalance()方法将我视为与Transaction接口正交,但原则规定不应强制客户端依赖于它不使用的方法 - 我怀疑Transaction接口为显示可能不够集中,以防止这种情况发生。

答案 2 :(得分:0)

如果您的父类是抽象的,为什么需要使用接口?必须在每个子类中定义父类中声明的任何抽象方法。

您可以简单地将所有这些函数放在类中的接口中,并使这些函数成为抽象的。应该这样做。