Misalkan kita memiliki kelas-kelas berikut:
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);
}
}
Sekarang mari panggil recursivedi kelas A:
public class Demo {
public static void main(String[] args) {
A a = new A();
a.recursive(10);
}
}
Outputnya, seperti yang diharapkan menghitung mundur dari 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)
Mari kita ke bagian yang membingungkan. Sekarang kita sebut recursivedi kelas B.
Diharapkan :
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)
Sebenarnya :
B.recursive(10)
A.recursive(11)
B.recursive(10)
A.recursive(11)
B.recursive(10)
A.recursive(11)
B.recursive(10)
..infinite loop...
Bagaimana ini bisa terjadi? Saya tahu ini adalah contoh yang dibuat, tetapi itu membuat saya bertanya-tanya.
Pertanyaan lama dengan kasus penggunaan konkret .