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_work
en C
la ejecución perfom_work
de A
lo 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.