接口ExecutorInterface
有一个函数叫doStuff()
。我的类Executor
实现了接口ExecutorInterface
并覆盖了doStuff()
。
接口函数doStuff()
调用方法getData()
。如果我重写函数doStuff()
,getData()
还会被调用吗?如何在不失去原有功能的情况下为doStuff()
添加功能?
除非显式调用原始方法(通常是这种情况),否则不能
class Executor implements ExecutorInterface {
@Override
public void doStuff() {
ExecutorInterface.super.doStuff();
// some additional logic
}
}
在这里阅读更多(由于编辑-它不是真的有用,Oracle没有在这里描述调用默认类为super):
- 使用关键字super
请阅读:
- https://docs.oracle.com/javase/tutorial/java/IandI/override.html
您可以在方法override上调用getData
方法。为此,getData
方法必须是接口
public
方法。interface ExecutorInterface {
void doStuff();
default void getData() {
System.out.println("getData");
}
}
class Executor implements ExecutorInterface{
@Override
public void doStuff() {
getData();
//rest of the code
}
}
一个更好的方法是你做一个abstract class
abstract class ExecutorAbstract {
public void doStuff(){
getData();
}
private void getData() {
System.out.println("getData");
}
}
class Executor extends ExecutorAbstract{
@Override
public void doStuff() {
super.doStuff();
//rest of the code
}
}
这样,getData
方法将不会被任何其他类改变,除了必须调用super.doStuff()
来调用getData