我正在为一个基本上模拟银行系统的类工作(我们正在使用类中的并发性,所以我们需要为本学期剩下的时间做主干)。我遇到的问题是创建一个名为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
类中的接口方法是否正确?只有很多东西让我感到困惑。
答案 0 :(得分:1)
从AccountTransfer.java中删除帐户的初始化,因为您可以将创建的帐户对象传递给该类。此外,如上所述,当您将其实现为MVC时,受保护将变得非常重要,因为如果您将模型,视图和控制器设置为私有,则无法在模型,视图和控制器之间进行通信。
干杯马特
答案 1 :(得分:1)
我打算建议你向教练询问一些关于Interface Segregation Principle的不舒服的问题。特别是,getAccountNumber()和getAccountBalance()方法将我视为与Transaction接口正交,但原则规定不应强制客户端依赖于它不使用的方法 - 我怀疑Transaction接口为显示可能不够集中,以防止这种情况发生。
答案 2 :(得分:0)
如果您的父类是抽象的,为什么需要使用接口?必须在每个子类中定义父类中声明的任何抽象方法。
您可以简单地将所有这些函数放在类中的接口中,并使这些函数成为抽象的。应该这样做。