Frisch aus dem Mittagspäuschen!
Also ich fasse zusammen:
"virtual" : speed optimiert
"dynamic" : memory optimiert
beide ermöglichen in einer vererbten Klasse override zu benutzen. Wobei virtual das zu bevorzugende Schlüsselwort ist.
"abstract" : Methode sollte in der vererbten Klasse implementiert werden wenn man sie benutzen will.
"overload" : hat damit erstmal nichts zu tun, sondern ermöglicht Methoden den gleichen Namen zu geben und durch die unterschiedlichen Signaturen der Methoden unterschiedliche Parameter zu empfangen und immer anders zu verarbeiten.
"reintroduce" : Eine geerbte virtuelle Methode durch eine neue Deklaration verdecken. Wird die vererbte Klasse als die Basisklasse behandelt am Beispiel (TPapa(Sohn)) würde die Methode say von Tpapa aufgerufen werden, beim weglassen von "reintroduce" ist es eigentlich genauso, allerdings mit Warnung, welche ja berechtigt ist weil vielleicht Tpapa's Methode Abtract war und nicht existiert, Stichwort: AbstractError
"override" : Verweißt auf die Methode der Vererbten Klasse, sodass immer diese aufgerufen wird und nicht die virtuelle methode der Elternklasse welche ja vielleicht abstract ist und dann nicht existiert und das aufrufen zu einem Fehler führen würde.
Delphi-Quellcode:
program Override_Reintroduce_Unterschied;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
Tpapa =
class
public
{ public declarations }
procedure say;
virtual;
abstract;
end;
Tsohn =
class(Tpapa)
public
{ public declarations }
procedure say;
override;
end;
var
Sohn : Tsohn;
procedure Tsohn.say;
begin
Writeln('
Hi!');
end;
begin
try
Sohn := TSohn.Create;
TPapa(Sohn).say;
ReadLn;
{ TODO -oUser -cConsole Main : Code hier einfügen }
except
on E:
Exception do
Writeln(E.ClassName, '
: ', E.
Message);
end;
end.
Ich habe das Gefühl es ein wenig verstanden zu haben.
Thumbs Up