Wenn du nur eine neue Klasse eines Typs erstellen willst, geht das über Metaklassen:
Delphi-Quellcode:
TTierKlasse = class of TTier;
[...]
class function TKlonerei.Clone(Tier: TTier): TTier;
begin
// ohne Cast würde TObject.Create aufgerufen werden
result := TTierKlasse(Tier.ClassType).Create;
end;
Wenn du stattdessen eine Instanz wirklich kopieren willst, wird's schon etwas komplizierter. Als Pattern gibt es dazu Assign/AssignTo (leider kein Interface), allerdings ist das Duplizieren von Instanzen umstritten und in seltensten Fällen sinnvoll.