halt dich bei inherited nicht zu sehr am Constructor auf. Inherited leitet einen ganz normalen Methodenaufruf ein. eben nur mit dem Unterschied, dass man die Vorfahrklasse meint. Man kann inherited in jeder Methode nutzen.
Der Constructor ist eben eine ganz normale Methode, die nach ein paar Ergänzungen etwa so aussieht:
Delphi-Quellcode:
procedure myconstructor(param1,param2:integer; und hier die restlichen Parameter);
//param1 und param2 sind "versteckte Parameter" welche immer übergeben werden, wenn statt procedure constructor da steht
begin
//so und jetzt der Code, der eigentlich vor begin steht
if param2=1
then
begin
//param2=1, wenn man TMyClass.create aufruft
self:=System.ClassCreate(param1);
//param1 ist ein Pointer auf die RTTI der Klasse
//System.ClassCreate reserviert den Speicher für alle Felder (wird wie ein Record behandelt)
//und ruft noch self.afterconstruction auf, was meist leer ist
end
else
//param2=0 wenn man myClass.Create oder eben self.Create oder inherited create aufruft
self:=param1;
//Jede Methode hat einen ersten versteckten Parameter, und der ist immer self
//und erst hier kommt dein normaler Code aus der Methode/ dem Constructor
end;
Eigentlich könnte der Programmierer, dass ja auch selber erldigen.
Wenn er eine neue Instanz einer Klasse initialisieren will, kann er ja selber ClassCreate aufrufen. In Pascal/Delphi ist es halt einfacher: Da man ja meist eh irgendwelche wichtigen Initialisierungen des Objektes (z.B. IniFile öffnen) machen muss, hat man irgendeine Init-Methode. Also man würde meist ClassCreate aufrufen und dann die Init-Methode. Dies wurde einfach zusammengelegt und nennt sich jetzt Constructor. Und weil halt in den Constructoren meist wichtige Sachen erledigt werden, ist es günstig den Constructor des Vorfahren auch mit aufzurufen (ist ja nur zur Initialisierung).
Und wie gesagt: Bei anderen (virtuellen) Methode kann das auch sinnvoll sein. Es sei denn man überschriebt sie, weil man eben nicht will, was in der Vorfahrklasse gemacht wurde.
Edit: neue Frage, neuer Thread. Sonst kommen wir hier ganz durcheinander
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.