(* Credit Zalman Stern for this one *) MODULE foo EXPORTS Main; TYPE A = OBJECT a: INTEGER; METHODS init() := InitA; END; AB = A OBJECT b: INTEGER METHODS init() := InitAB; END; PROCEDURE InitA( self: A ) = BEGIN self.a := LAST( INTEGER ); END InitA; PROCEDURE InitAB( self: AB ) = BEGIN self.b := LAST( INTEGER ); A.init( self ); END InitAB; VAR ab: AB; BEGIN ab := NEW( AB ); ab.init(); END foo.