我有一个抽象类和一个扩展它的类,两个类中都有一个同名的方法。我想在另一个抽象类方法中调用抽象类中的方法。
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
}
}
FileGroup.java
public class FileGroup extends Controller {
public Result delete(Long id, boolean central) {
// do something
return super.delete(id);
}
}
super.delete
打电话Controller.delete
,但this.delete(id, true)
电话delete
中FileGroup
,而不是调用delete
中Controller
,这是造成递归无限循环和堆栈溢出。
[...],但
this.delete(id, true)
呼叫inFileGroup
而不是呼叫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);
}
}
这样可以避免Controller.delete
将调用委托给子类。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句