Der Vorfahre kann NIEMALS etwas vom Nachfahren wissen. (Ausnahme er liest es via
RTTI aus der/seiner TypeInfo/ClassType der erzeugten Instanz, oder greifst in dessen Methoden hart auf die anderen Typen zu)
Das ist wie bei Class-Procedure und Class-Procedure-Static, wo Letztere nur den ClassType seiner Deklaration kennt und Ersteres den aktuellen Typ der Ableitung (der Variable).
Also gibt es nur die Möglichkeit mit OVERRIDE, denn dann kennt es auch der Vorfahre. (abgesehn von der
RTTI)
PS: Auch bei Property gibt es sowas wie
Override Overload und Reintroduce.
Delphi-Quellcode:
//Procedure Test; Reintroduce;
Property n_Var Read Get_n_var; // overload/override = das gleiche Property, aber beim Nachfahren-[B]Typ[/B] mit anderem Getter
//Procedure Test; {Override} Overload;
Property n_Var: Integer Read Get_n_var; // reintroduce = ein neues Property mit nit selbem Namen
Und natürlich bezieht sich sowas immer auf den Typ der Variable und nicht auf den internen Typ vom Create.
Erstes wird meistens genommen, wenn man nur Default bzw. Stored ändern will, aber es kann auch für Read, Write und Index benutzt werden und der Rest wird geerbt.
Also von unserem Verständnis eher wie ein Override, aber aus Sicht des Compilers eigentlich mehr ein Overload.
Wenn es nur eine Reihe der Vererbung gibt, dann könnte man eine Function/GetterFunction in den letzen Erben tun,
oder in der selben
Unit eine Function/GetterFunction in die Basisklasse, wo anhand vom ClassType bzw. IS mit ein paar IFs jeweils in den gewünschten Typ castet und dann das "richtige" zurückgibt.
Aber das ist alles eigentlich echt unschöner und hart verknubbelter Code, somit bleibt nur noch Override oder
RTTI.