Giả sử chúng ta có các lớp sau:
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);
}
}
Bây giờ, hãy gọi recursive
trong lớp A:
public class Demo {
public static void main(String[] args) {
A a = new A();
a.recursive(10);
}
}
Đầu ra, như mong đợi là đếm ngược từ 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)
Hãy đến phần khó hiểu. Bây giờ chúng ta gọi recursive
vào lớp B.
Dự kiến :
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)
Thực tế :
B.recursive(10)
A.recursive(11)
B.recursive(10)
A.recursive(11)
B.recursive(10)
A.recursive(11)
B.recursive(10)
..infinite loop...
Làm thế nào điều này xảy ra? Tôi biết đây là một ví dụ sáng tạo, nhưng nó khiến tôi tự hỏi.
Câu hỏi cũ hơn với một trường hợp sử dụng cụ thể .