Ich verstehe das Problem nicht. Das funktioniert doch alles wie gewünscht:
Delphi-Quellcode:
Type
TA = Class
Function WhoAmI : String; Virtual;
End;
TB = Class(TA)
Function WhoAmI : String; override;
End;
Function TA.WhoAmI : String;
begin
result := 'A';
end;
Function TB.WhoAmI : String;
begin
result := 'B';
end;
Function GetInst : TA;
Begin
Result := TB.Create;
End;
Var
test : TA;
begin
test := GetInst;
Writeln(test.WhoAmI) // Liefert 'B', was auch sonst
test.free;
end;