Class parent {
protected void myMethod() {
if(someCodition) {
//return this as well as child's myMethod.
}
}
Class child extends Parent {
@override
protected void myMethod() {
super.myMethod();
//code below this line should not execute if someCondition.
//want parent to handle all this
}
}
请不要建议在父类中使用一些布尔标志类的东西并在子级中检查它。实际上子类将被其他开发人员使用,我不希望他们关注任何这样的条件,所以想要从父本身退出。
我完全清楚它违反了oops的抽象原则,但我需要违反。
正在更新
PS:调用myMethod()不在子控件或父控件中,因此无法创建一个单独的方法,如一个答案中所述。 实际上它和API方法,所以系统会根据需要自动执行它,我不能停下来调用它。
答案 0 :(得分:3)
您可能正在寻找template method pattern [或其某些变体]
用户将覆盖受保护的方法myTemplateMethod()
,并且不会覆盖myMethod()
。
myMethod()
将调用super.myMethod()
[它没有被覆盖,所以实际上super将被立即调用],超级将调用[如果条件满足] myTemplateMethod()
[伪代码]的一些东西:
abstract Class parent {
protected abstract void myTemplateMethod();
protected final void myMethod() {
if(someCodition) {
myTemplateMethod();
}
}
Class child extends Parent {
@override
protected void myTemplateMethod() {
//code that will be invoked only if someCodition is met
}
}