Java 如何在不获取StackOverflowException的情况下重复可重写方法?

Java 如何在不获取StackOverflowException的情况下重复可重写方法?,java,overriding,Java,Overriding,我正在用Java创建一个库,需要一个无限重复的方法。它必须是可重写的。我在下面提出了类似的想法,但是我得到了StackOverflowException,这是可以预测的 public void loop() { loop(); } @Override public void loop() { super.loop(); //some stuff } 不加区分地调用自身的方法必然会引发堆栈溢出错误。避免这种不必要的递归,并可能使用无限循环: @Override public voi

我正在用Java创建一个库,需要一个无限重复的方法。它必须是可重写的。我在下面提出了类似的想法,但是我得到了
StackOverflowException
,这是可以预测的

public void loop() {
  loop();
}

@Override
public void loop() {
  super.loop();
  //some stuff
}

不加区分地调用自身的方法必然会引发堆栈溢出错误。避免这种不必要的递归,并可能使用无限循环:

@Override
public void loop() {
    while(true) {
        super.loop();
    }
}
而父母应该做任何该做的事:

public void loop() {
  //do what is meant to do, not loop()
}

将工作内容从
循环
方法移到单独的方法中

public void loop() {
   while (!condition) {
      doWork();
   }
}

protected abstract void doWork();



@Override
protected void doWork() {
   ....
}

“需要一个无限重复的方法”-为什么需要这样的东西?这是递归。当堆栈不断被填满时,您无意中惊醒了一个魔鬼(StackOverflow)