如何从父方法返回子方法?

时间:2012-03-17 11:09:39

标签: java oop

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方法,所以系统会根据需要自动执行它,我不能停下来调用它。

1 个答案:

答案 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
  }
}