Supposons que nous ayons les classes suivantes :
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);
}
}
Maintenant, appelons recursive
en classe A :
public class Demo {
public static void main(String[] args) {
A a = new A();
a.recursive(10);
}
}
La sortie est, comme prévu, un décompte à partir de 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)
Venons-en à la partie la plus déroutante. Maintenant nous appelons recursive
en classe B.
Attendu :
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)
Réel :
B.recursive(10)
A.recursive(11)
B.recursive(10)
A.recursive(11)
B.recursive(10)
A.recursive(11)
B.recursive(10)
..infinite loop...
Comment cela se fait-il ? Je sais qu'il s'agit d'un exemple inventé, mais il me fait me demander.
Question plus ancienne avec un cas d'utilisation concret .