【问题标题】:Subclasses, Abstraction, and Inheritance子类、抽象和继承
【发布时间】:2014-02-07 02:57:28
【问题描述】:

我正在为一个基本上模拟银行系统的课程做作业(我们在课堂上处理并发问题,因此我们需要为本学期剩余的时间做主干)。我遇到的问题是创建一个名为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(只是 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 类中的接口方法对吗?有一大堆东西让我感到困惑。

【问题讨论】:

  • 为什么需要两个Account 字段?在Transaction protected 中制作一个并在子类中重新使用它。
  • 如果你有一个不是abstract 的类,它实现了一个接口或扩展了一个abstract 类,它需要对所有继承的abstract 方法(包括接口,隐式为abstract
  • 我想我只是在想这个问题。

标签: java inheritance abstraction


【解决方案1】:

从 AccountTransfer.java 中移除 account 的初始化,因为您可以将创建的 account 对象传递给该类。此外,如上所述,当您将其实现为 MVC 时,protected 将很重要,因为如果您将其设为私有,您将无法在模型、视图和控制器之间进行通信。

干杯马特

【讨论】:

    【解决方案2】:

    我打算建议你问你的导师一些关于 Interface Segregation Principle 的不舒服的问题。特别是,getAccountNumber() 和 getAccountBalance() 方法让我觉得与 Transaction 接口正交,但原则规定不应强迫任何客户端依赖它不使用的方法——我怀疑 Transaction 接口是显示的焦点可能不够充分,无法防止这种情况发生。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-12
        • 2016-11-05
        相关资源
        最近更新 更多