interface O { public Integer oc(Integer i); } abstract class A { Integer i; public A(){ this.i = 0; } abstract void n(Object o); class X{ private X(Integer i){ A.this.i = i; } } public X getX(int i){ return new X(i); } } class B extends A implements O{ B(){ super(); } public Integer oc(Integer i) { new B().getX(i); return i; } void n(Object o) { for (int j = 0; j < J.petTypes.length; ++j){ if (J.petTypes[J.petTypes.length - 1].isInstance(o)) { ((B)o).i = j; } else { ((B)o).oc(j); } } } } class C extends B{ C(Integer i){ super(); super.i=i; } public Integer oc(Integer i) { new C(i); return i; } } public class J implements O{ static Class petTypes[] = { B.class, C.class, J.class }; public Integer oc(Integer i) { i++; try { Object o = petTypes[i].newInstance(); C c = new C(i); c.n(o); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } if (petTypes.length == i){ return i; } return new J().oc(i); } public static void main(String[] args) { System.out.print(new J().oc(1)); } }