代码正在运行,但我想更好地理解主题,但我不确定如何命名问题。如果接口(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/