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 recursive
di 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 recursive
di 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 .