package dk.itu.oop.testexamf2004; class Test3 { public static void main(String[] args){ // A a = new B(); // A a = new A().new B(); Incr a = new A().new B(); a.incr(10); System.out.println(a); } } interface Incr { void incr(int d); } class A implements Incr{ int i; Incr that; public void incr(int d){ if (d > 0){ this.i += d; that.incr(d-1); } } public String toString(){ return "A's i is: " + i; } class B implements Incr { int i; {A.this.that = this;} public void incr(int d){ if (d > 0){ this.i += d; A.this.incr(d/2); } } public String toString(){ return A.this.toString()+ " B's i is: " + i; } } } class B extends A { int i; public void incr(int d){ if (d > 0){ this.i += d; super.incr(d/2); } } public String toString(){ return super.toString()+ " B's i is: " + i; } }