覆盖接口功能?



接口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

最新更新