Supponiamo di avere le seguenti classi:
class A {
void recursive(int i) {
System.out.println("A.recursive(" + i + ")");
if (i > 0) {
recursive(i - 1);
}
}
}
class B extends A {
void recursive(int i) {
System.out.println("B.recursive(" + i + ")");
super.recursive(i + 1);
}
}
Ora chiamiamo recursivein classe A:
public class Demo {
public static void main(String[] args) {
A a = new A();
a.recursive(10);
}
}
L'output è, come previsto, un conto alla rovescia da 10.
A.recursive(10)
A.recursive(9)
A.recursive(8)
A.recursive(7)
A.recursive(6)
A.recursive(5)
A.recursive(4)
A.recursive(3)
A.recursive(2)
A.recursive(1)
A.recursive(0)
Veniamo alla parte confusa. Ora chiamiamo recursivein classe B.
Previsto :
B.recursive(10)
A.recursive(11)
A.recursive(10)
A.recursive(9)
A.recursive(8)
A.recursive(7)
A.recursive(6)
A.recursive(5)
A.recursive(4)
A.recursive(3)
A.recursive(2)
A.recursive(1)
A.recursive(0)
Attuale :
B.recursive(10)
A.recursive(11)
B.recursive(10)
A.recursive(11)
B.recursive(10)
A.recursive(11)
B.recursive(10)
..infinite loop...
Come avviene questo? So che questo è un esempio inventato, ma mi meraviglia.
Domanda precedente con un caso d'uso concreto .