Метод, который вызывает себя без разбора, обязан вызвать ошибку переполнения стека. Избегайте этой нежелательной рекурсии и, возможно, используйте бесконечный цикл:
@Override
public void loop() {
while(true) {
super.loop();
}
}
В то время как родитель должен просто делать то, что должен:
public void loop() {
//do what is meant to do, not loop()
}