Der Ausgang der Konsolenanwendung istPolymorphismus und Vererbung mit Klassenreferenz? unter
Parent
Parent
Parent
statt
Parent
Child1
Child2
Warum sollte dies geschehen? Außerdem, wie man die beabsichtigte Ausgabe erhält? Danke vielmals !
PS: Noch immer keine Ahnung, nach dem Lesen dieses related SO post ...
program Project1;
{$APPTYPE CONSOLE}
type
TParent = class;
TParentClass = class of TParent;
TParent = class
public
ID: string;
constructor Create;
end;
TChild1 = class(TParent)
public
constructor Create;
end;
TChild2 = class(TParent)
public
constructor Create;
end;
constructor TParent.Create;
begin
ID := 'Parent';
end;
constructor TChild1.Create;
begin
ID := 'Child1';
end;
constructor TChild2.Create;
begin
ID := 'Child2';
end;
procedure Test(ImplClass: TParentClass);
var
ImplInstance: TParent;
begin
ImplInstance := ImplClass.Create;
WriteLn(ImplInstance.ID);
ImplInstance.Free;
end;
begin
Test(TParent);
Test(TChild1);
Test(TChild2);
Readln;
end.
Hinweis Ich habe den Code bearbeitet. Sie wollten nicht in jeder abgeleiteten Klasse neue 'ID'-Felder hinzufügen, die das in' TParent' deklarierte verbergen. –