从实际类中具有相同名称的抽象类中的另一个方法调用方法

Moh*_*eri 11 java abstract-class class superclass

我有一个抽象类和一个扩展它的类,我在这两个类中都有一个同名的方法.我想在抽象类的另一个方法中调用抽象类中的方法.

Controller.java

public abstract class Controller {

    public Result delete(Long id) {
        return this.delete(id, true);
    }
    public Result delete(Long id, boolean useTransaction) {
        // do something and return result
    }
}
Run Code Online (Sandbox Code Playgroud)

FileGroup.java

public class FileGroup extends Controller {

    public Result delete(Long id, boolean central) {
        // do something
        return super.delete(id);
    }
}
Run Code Online (Sandbox Code Playgroud)

super.delete调用Controller.deletethis.delete(id, true)调用deleteFileGroup,而不是调用deleteController,这是造成递归无限循环和堆栈溢出.

aio*_*obe 7

[...]但是this.delete(id, true)调用delete FileGroup而不是调用delete in Controller.

是的,所有方法都是Java虚拟的,没有办法避免这种情况.但是,您可以通过创建(非重写)辅助方法来解决此问题,Controller如下所示:

public abstract class Controller {

    private Result deleteHelper(Long id, boolean useTransaction) {
        // do something and return result
    }

    public Result delete(Long id) {
        return deleteHelper(id, true);
    }
    public Result delete(Long id, boolean useTransaction) {
        return deleteHelper(id, useTransaction);
    }
}
Run Code Online (Sandbox Code Playgroud)

通过这样做,您可以避免Controller.delete将调用委托给子类.