Hm..ok, ich versuchs.
Also, Polymorphie bedeutet, dass Du ein Attribut mit dem Typ Deiner Basis-Klasse anlegst, und dann - wenn Du das Objekt letztendlich mit .Create erzeugst - nichtmehr die Basis-Klasse erstellst, sondern eine davon abgeleitete Klasse.
Hier das ganze mal als Code:
Delphi-Quellcode:
type
TBasisKlasse = class(TObject)
public
iErgebnis:integer;
procedure Berechne(a,b:integer);
end;
TAddierenKlasse = class(TBasisKlasse)
public
procedure Berechne(a,b:integer); override;
end;
TSubtrahierenKlasse = class(TBasisKlasse)
public
procedure Berechne(a,b:integer); override;
end;
Dann die Implementierung:
Delphi-Quellcode:
procedure TBasisKlasse.Berechne(a,b:integer);
begin
// Dummy-Funktion
end;
procedure TAddierenKlasse .Berechne(a,b:integer);
begin
self.Ergebnis=a+b;
end;
procedure TSubtrahierenKlasse .Berechne(a,b:integer);
begin
self.Ergebnis=a-b;
end;
Dadurch hast Du eine Basisklasse, und 2 davon abgeleitete Klassen, mit der gleichen Funktion. Beide funktionen machen etwas unterschiedliches. In der Funktion der Basisklasse steht nichts, da es sich um eine leere Dummy-Funktion handelt.
Im Deinem Programm dann:
Delphi-Quellcode:
var
meinMatheObejkt:TBasisKlasse;
function Addieren;
begin
meinMatheObjekt:=TAddierenKlasse.Create;
meinMatheObjekt.Berechne(10,5);
ShowMessage(IntToStr(meinMatheObjekt.Ergebnis)); // = 15
FreeAndNil(meinMatheObjekt);
end;
function Subtrahieren;
begin
meinMatheObjekt:=TSubtrahierenKlasse.Create;
meinMatheObjekt.Berechne(10,5);
ShowMessage(IntToStr(meinMatheObjekt.Ergebnis)); // = 5
FreeAndNil(meinMatheObjekt);
end;
Das mal zum Thema Polymorphie (ich hoffe, es ist soweit richtig @all
).
Das würde in Deinem Konkreten Fall bedeuten, dass Du in Deiner TMyNewList-Klasse kein Attribut für einen Knoten einbinden musst, sondern das Attribut aus der Mutterklasse lassen kannst (TKnoten). Wenn Du nun die TKnoten-Klasse erweitern willst, dass z.B. im Kontruktor noch etwas mehr passiert, als in TKnoten, dann leitest Du dir von TKnoten eine neue Klasse ab (TNewKnoten).
In den Methoden Deiner TMyNewListe kannst Du dann in Dein Wurzel-Attribut, welches Du aus der Mutterklasse hast und von Typ TKnoten ist, ein Objekt vom Typ TNewKnoten erzeugen.
D.h, Du kannst zu Laufzeit entscheiden, welches Objekt letzten Endes in dem Attribut vorhanden ist.
Hui, ganz schön viel stoff. Ich hoffe, es hilft dir.
Gruß
Christian