public abstract class B extends java.lang.Object { public void () { B this_0; this_0 := @this: B; specialinvoke this_0.()>(); return; } public abstract void m(); public void n(A) { Aprime a_0_t; A a_0; java.io.PrintStream $r0_0; a_0 := @parameter0: A; $r0_0 = ; virtualinvoke $r0_0.(" B.n( A ) "); a_0_t = (Aprime) a_0; specialinvoke a_0_t.(); return; } } public class Bprime extends B { public void () { Bprime this_0; this_0 := @this: Bprime; specialinvoke this_0.()>(); return; } public int nonIdempotent(int) { int a_0; a_0 := @parameter0: int; return a_0; } public void m() { Bprime this_0_t, this_0; java.io.PrintStream $r0_0; this_0 := @this: Bprime; this_0_t = (Bprime) this_0; specialinvoke this_0_t.(189); $r0_0 = ; virtualinvoke $r0_0.(" B\'.m() "); return; } } public class ClassHierarchies extends java.lang.Object { public void () { ClassHierarchies this; this := @this: ClassHierarchies; specialinvoke this.()>(); return; } public static void main(java.lang.String[]) { A a_0_t, $r0_0, a_0; Aprime aPrime_0_t, aPrime_0_t, $r1_0, aPrime_0; boolean $z0_0; Bprime $r2_1; B b#2_2, b#2_1, b#2_0; BdoublePrime $r3_0; $r0_0 = new A; specialinvoke $r0_0.()>(); a_0 = $r0_0; a_0_t = (A) a_0; specialinvoke a_0_t.(); $r1_0 = new Aprime; specialinvoke $r1_0.()>(); aPrime_0 = $r1_0; aPrime_0_t = (Aprime) aPrime_0; specialinvoke aPrime_0_t.(); aPrime_0_t = (Aprime) aPrime_0; $z0_0 = specialinvoke aPrime_0_t.(); if $z0_0 == 0 goto label0; $r2_1 = new Bprime; specialinvoke $r2_1.()>(); b#2_2 = $r2_1; b#2_1 = b#2_2; goto label1; label0: $r3_0 = new BdoublePrime; specialinvoke $r3_0.()>(); b#2_0 = $r3_0; b#2_1 = b#2_0; label1: virtualinvoke b#2_1.(aPrime_0); virtualinvoke b#2_1.(); return; } }