Java 从super子方法返回

Java 从super子方法返回,java,super,Java,Super,我有这样的想法: class SuperClass { public void onClick(){ if(disabled) return; } } class SubClass extends SuperClass { public void onClick(){ super.onClick(); System.out.println("Clicked"); } } class SuperClass { public void onClick(

我有这样的想法:

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

class SubClass extends SuperClass {
  public void onClick(){
    super.onClick();
    System.out.println("Clicked");
  }
}
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");
  }
}
每次单击按钮时,都会输出“单击”

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

您应该使用


也许是这样的:

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

class SubClass extends SuperClass {
  public void onClick(){
    super.onClick();
    System.out.println("Clicked");
  }
}
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");
  }
}

委托给其他方法:

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

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

无论如何,你不能这样。超级对象中的函数调用无权阻止子类中的方法执行。你要找的可能是一种模式。你可以吃这样的东西

 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");
  }
}

您在哪里/如何设置禁用状态?@DRCOLOSOS在超级类中。这不是问题所在。问题是,当我从超类中的方法返回时,它只从超方法返回,而不是从子类中的方法返回。