(* Dynamic dispatch *) class A inherits IO { (* Simple method that returns the second parameter *) method1( p1 : Int, p2: String ) : Object { { out_string(p2); out_string("\n"); out_int(p1); out_string("\n"); }}; }; class B inherits A { method1( p1 : Int, p2: String ) : Object { { out_int(p1); out_string("\n"); out_string(p2); out_string("\n"); }}; }; class Main inherits IO { id : B <- new B; main(): Object { { id@B.method1( 1, "B is subclass" ); id@A.method1( 5, "A is super class" ); } }; };