Stackoverflow de error cuando se lanza a una superclase

Hamza belmellouki:

He encontrado el siguiente código en el Internet.

 class A {
        public void perform_work() {
            System.out.println("A");
        }
    }
class B extends A {
    public void perform_work() {
        System.out.println("B");
    }
}

class C extends B {
    public void perform_work() {
        ((A) this).perform_work(); // Line 163
    }

    public static void main(String[] args) {
        C c = new C();
        c.perform_work();
    }
}

Este código se compila limpiamente, pero me da un error cuando se ejecuta:

Exception in thread "main" java.lang.StackOverflowError
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)

........................................... más errores como ese

Yo esperaba que la línea 163 (especificada en el código anterior) llamaría perfom_work()definido en la clase A. ¿Por qué se genera este error? ¿Y como resolverlo?

lealceldeiro:

Si desea que perfom_worken Cla ejecución perfom_workde Alo que necesita para cambiarlo a:

public void perform_work() {
    super.perform_work();
}

Y hacer lo mismo cambio en B

Como está escrito actualmente se está llamando a sí mismo de forma recursiva, por lo que nunca se detiene.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=316144&siteId=1
Recomendado
Clasificación