Suppose we have the following classes:
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); } }
Now call recursive in class A:
public class Demo { public static void main(String[] args) { A a = new A(); a.recursive(10); } }
The output is expected to be reckoned with 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)
Let's move on to the confusing part. Now we call recursive in class B.
Expected
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)
Actual
B.recursive(10) A.recursive(11) B.recursive(10) A.recursive(11) B.recursive(10) A.recursive(11) B.recursive(10) ..infinite loop...
How does this happen? I know this is an invented example, but it makes me wonder.
Old question with specific use case .
java inheritance recursion
raupach Dec 30 '15 at 14:11 2015-12-30 14:11
source share