다음 클래스가 있다고 가정합니다.
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);
}
}
이제 recursive
클래스 A를 호출합니다 .
public class Demo {
public static void main(String[] args) {
A a = new A();
a.recursive(10);
}
}
출력은 예상대로 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)
혼란스러운 부분을 살펴 보겠습니다. 이제 우리 recursive
는 클래스 B를 호출합니다 .
예상 :
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)
실제 :
B.recursive(10)
A.recursive(11)
B.recursive(10)
A.recursive(11)
B.recursive(10)
A.recursive(11)
B.recursive(10)
..infinite loop...
어떻게 이런 일이 발생합니까? 이것이 고안된 예라는 것을 알고 있지만 궁금해합니다.
구체적인 사용 사례 가있는 이전 질문입니다 .