从super的子方法返回

时间:2014-05-14 11:54:44

标签: java super

我有这样的事情:

class SuperClass {
  public void onClick(){
    if(disabled) return;
  }
}

class SubClass extends SuperClass {
  public void onClick(){
    super.onClick();
    System.out.println("Clicked");
  }
}

每次单击按钮时都会输出“Clicked”。

如果disabled为true并且不想在每个SubClass中添加额外的行,我希望SubClass onClick()不起作用。我怎么能这样做?

4 个答案:

答案 0 :(得分:3)

您应该使用template method pattern

abstract class SuperClass {
  public void onClick(){
    if(!disabled) clickAction() ;
  }

  public abstract void clickAction();
}

class SubClass extends SuperClass {
  public void clickAction(){
    System.out.println("Clicked");
  }
}

答案 1 :(得分:2)

也许是这样的:

class SuperClass {
  public void onClick(){
    if(disabled) return;
    processClick();
  }
  protected void processClick() {
  }
}

class SubClass extends SuperClass {
  protected void processClick(){
    super.processClick();
    System.out.println("Clicked");
  }
}

答案 2 :(得分:2)

委托另一种方法:

class SuperClass {
  public void onClick(){
    if(!disabled) handleOnClick();
  }
  public void handleOnClick(){
  }
}

class SubClass extends SuperClass {
  public void handleOnClick(){
    System.out.println("Clicked");
  }
}

答案 3 :(得分:2)

无论如何你不可能这样。超级对象中的函数调用没有任何权限来阻止子类中的方法执行。您正在寻找的是TemplateMethodPattern模式。你可以有这样的东西

 abstract class SuperClass {
  public void onClick(){
    if(disabled) return;
    doClick();
  }

  protected abstract void doClick();

}

class SubClass extends SuperClass {
  protected void doClick(){  
    System.out.println("Clicked");
  }
}