(* Dynamic dispatch *) Class A inherits IO { (* Simple method that returns the second parameter *) method1( p1 : Int, p2: String ) : Object { { out_string("A "); out_string(p2); out_string("\n"); } }; }; Class B inherits A { method1( p1 : Int, p2: String ) : Object { { out_int(p1); out_string(" B "); out_string(p2); out_string("\n"); }}; }; Class C inherits A { }; Class Main inherits IO { id : A <- new A; id2: B <- new B; id3: C <- new C; main(): Object { { id.method1( 1, "superclass" ); id2.method1( 1, "subclass" ); id3.method1( 1, "empty subclass -> superclass" ); } }; };