Pozoruju, že v tom máš trošku hokej. Můžeš myslet dvě možnosti: 1. Děláš nějaký seznam uzlů, kde má každý uzel svého potomka a předka. Nebo se ti jedná o takovýto případ:
TPredek = class (object)
Nějaké-deklarace
Constructor Create (....);
end;
TPotomek = class (TPredek)
Nějaké-deklarace
Constructor Create (....);
end;
Pak při vytvoření instance Potomek := TPotomek.Create (x); oba objekty (TPredek a TPotomek) jedno jsou. Self v obou třídách ukazuje na tentýž objekt a není třeba rozlišovat nijak jestli je někde TPotomkem nebo TPredkem. Je to rozlišeno jen umístěním kódu - proto jsou virtuální metody. Aby se dalo z TPredek volat metoda TPotomka, i když jí defakto kompilátor v době kompilace nezná. Není třeba se tím nijak vzrušovat ani to extra zpracovávat, obvykle to kompilátor udělá vždycky dobře - protože objekt je identický a obsahuje všechny metody a vlastnosti (záleží jen, které jsou odkad volatelné - na nestandartní volání je možno v pohodě použít přetypování).Jestli ti jde skutečně o vytvoření nového potomka takto:
constructor NovyObjekt.Create(Nieco: TPredok);
begin
Predok := Nieco;
end;
kde Nieco typu TPredok nemá s NovObject vůbec nic společného, nelze to takto udělat. Musíš předávat odkaz na třídu, asi takhle:TPredok = class (object)
...
end;
TPredokClass = class of TPredok;
NovyObjekt = objekt
Predok: TPredok;
ostatne_vlastnosti_a_metody;
constructor Create(Nieco: TPredokClass);
end;
---
---
constructor NovyObjekt.Create(Nieco: TPredokClass);
begin
Predok := Nieco.Create (...);
end;