type list = class procedure Add(a: T); begin assert(a.Equals(5)); assert(a.ToString()='5'); end; procedure Add2(a:T);virtual; begin end; end; My = class(list) procedure Add2(a: integer);override; begin assert(a.Equals(3)); end; end; begin var m := new My; m.Add(5); m.Add2(3); end.