java - 在抽象类方法中调用接口(interface)方法

标签 java interface abstract-class invoke

代码正在运行,但我想更好地理解主题,但我不确定如何命名问题。如果接口(interface)方法为空,我怎么可能在抽象类方法中调用接口(interface)方法?谁能告诉我这种操作在 Java 中是如何调用的?在我参加的大学类(class)中,幻灯片将问题命名为“通过 API 编程”,但我用谷歌搜索时找不到任何内容。

我有一个接口(interface)类,它有 getBalance 方法:

public interface BankAccount {

int getBalance();
...
}

然后我在抽象类方法中调用接口(interface)方法:

public abstract class AbstractBankAccount implements BankAccount {

private final bankAccountNo;
private int accountBalance;  

abstractBankAccount(int bankAccountNo) {
    this.bankAccountNo = bankAccountNo;
}

public void transferBalance(bankAccount account) {

// so here is what I am struggling to understand: account.getBalance() is called, but getBalance() method in interface is empty, how does it work then? 

final int accountBal = account.getBalance();

    if (accountBal < 0)
        throw new IllegalArgumentException("not enough money on the account");

    accountBalance += accountBal;

    account.withdraw(accountBal);
}
}

最佳答案

在抽象类中,一些方法留给具体的继承者去实现。

虽然该方法现在是空的(抽象的),但是当您创建一个非抽象的实现时,您必须为该方法提供一个主体。那个 body 将被称为。

这是一个例子:

abstract class Parent {
  abstract String someMethod();

  public String getValue() {
    return someMethod();//how could this work?! someMethod() has no body!
  }
}

class Child extends Parent {

  @Override
  String someMethod() { //this won't compile unless I implement someMethod()
    return "data";
  }
}

虽然 someMethod() 在 Parent 中是抽象的,但您实际上不能创建 Parent 的实例(因为它是抽象的)。您必须扩展它,这需要您提供 someMethod() 的实现。

关于java - 在抽象类方法中调用接口(interface)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42307738/

相关文章:

java - Glassfish:线程池的任务队列已满

java - 打印两个 ArrayList 的每个元素

arrays - 为什么System.Array对象具有Add()方法?

actionscript-3 - 如何避免使用接口(interface)重用相同的实现代码?

scala - AggregateByKey 在抽象类中时无法编译

java - 从网络元素列表中删除逗号和分号

c++ - 如何从接口(interface)获取派生类?

c++ - C++ 中的多态性和类抽象示例

java - 为什么我会收到以下错误以及空构造函数中应该有什么?

java - 验证业务规则