我有一个抽象类和一个扩展它的类,两个类中有一个具有相同名称的方法。
我想在抽象类的另一个方法中调用抽象类中的方法。
控制器.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
}
}
文件组.java
public class FileGroup extends Controller {
public Result delete(Long id, boolean central) {
// do something
return super.delete(id);
}
}
super.delete
call Controller.delete
but this.delete(id, true)
call delete
in FileGroup
而不是打电话delete
in Controller
这导致递归无限循环和堆栈溢出。
[...] 但this.delete(id, true)
调用删除FileGroup
而不是调用删除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);
}
}
通过这样做,您可以避免Controller.delete
将调用委托给子类。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)