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.delete但this.delete(id, true)调用delete的FileGroup,而不是调用delete中Controller,这是造成递归无限循环和堆栈溢出.
[...]但是
this.delete(id, true)调用deleteFileGroup而不是调用delete inController.
是的,所有方法都是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将调用委托给子类.