继承和递归
2022-08-31 11:49:00
假设我们有以下类:
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);
}
}
现在让我们调用类 A:recursive
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)
让我们进入令人困惑的部分。现在我们调用 B 类。recursive
预期:
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...
这是如何发生的?我知道这是一个设计的例子,但它让我感到疑惑。
具有具体用例的旧问题。