Hallo Motzi,
Deine Ausarbeitung beschreibt den Punkt Polymorphie nicht ganz richtig.
Das Polymorphie mit "Vielgestaltigkeit" übersetzt werden kann ist richtig. Was Du in Deiner Ausarbeitung unter Polymorphie beschreibst ist eher überschreiben o. ersetzten von Methoden und Eigenschaften.
Unter Polymorphie versteht man folgendes:
Schaun wir erstmal folgenden Source an
Delphi-Quellcode:
Type
TAbstractBaseClass = class(TObject)
private
public
procedure DoShowMessage; virtual; abstract;
end;
TFirstClass = class(TAbstractBaseClass)
private
public
procedure DoShowMessage; override;
end;
TSecondClass = class(TAbstractBaseClass)
private
public
procedure DoShowMessage; override;
end;
...
procedure TFirstClass.DoShowMessage;
begin
ShowMessage('TFirstClass');
end;
procedure TSecondClass.DoShowMessage;
begin
ShowMessage('TSecondClass');
end;
...
procedure DoIt;
var
F : TAbstractBaseClass;
S : TAbstractBaseClass;
begin
F:=TFirstClass.Create; // <- hier ist die Polymorphie !!!
S:=TSecondClass.Create; // <- hier ist die Polymorphie !!!
Try
Finally
F.Free;
S.Free;
end;
end;
TAbstractBaseClass ist unsere abstrake Basisklasse. Von dieser Klasse werden TFirstClass und TSecondClass abgeleitet. Erst in den Nachfahren wird die procedure DoShowMessage tatsächlich deklariert.
In der procedure DoIt werden jetzt die Instanzen F und S vom Type TAbstractBaseClass deklariert. Und jetzt kommt es: F wird als TFirstClass und S als TSecondClass erzeugt. Die Instanzen F und S vom Type TAbstractBaseClass können hier sowohl vom Type TFirstClass oder TSecondClass gestalt annehmen. Das ist Polymorphie.
Dadurch, dass in TAbstractBaseClass die Methode DoShowMessage als virtual erklärt wurde wird sie beim Create mit in die Virtuelle Methoden Tabelle (
VMT) aufgenommen. Dadurch, das für jede Instanz beim Create eine eigene
VMT erzeugt wird, ist sichergestellt, dass immer die richtige DoShowMessage Methode aufgerufen wird.