LKG/Inf 11 2011/Polymorphie
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Pascal</language>
* Eine Variable (Instanz) kann für Objekte verschiedener Klassen stehen
* Dieselbe Methode (z.B. "zeige") kann an unterschiedliche Objekte verschiedener Klassen gesendet werden und diese wissen, wie es auszuführen ist.
* Der Sender muss also nicht wissen, zu welcher Klasse ein Objekt gehört.
'''Bsp:'''
<code id="514b157f31352">type
TListe = class ..
Kollektion : array[0..9] of TFigur;
...
end;
// implement-Teil
procedure Traversieren;
var AktuelleFigur : TFigur; // Der Variablen der Oberklasse
begin // TFigur dürfen die Variablen
while not Liste.EoList do // der Unterklassen zugewiesen werden.
begin
AktuelleFigur := Liste.GetElement; // Es ist nicht bekannt,
AktuelleFigur.getFlaeche; // was kommt! -> Methodensuche
end;
end;</code>
In "getFlaeche" soll die Flaeche berechnet und zurückgegeben werden.
<code id="514b157f313d0">type
TFigur=class
function getFlaeche:real; virtual; // Funktion muss nicht existieren
end;
TKreis=class(TFigur)
r:real;
function getFlaeche:real; override; // Funktion wird überschrieben
end;
TQuadratclass(TKreis)
function getFlaeche:real; override; // Funktion wird überschrieben
end;</code>
Wenn TKreis.getFlaeche aufgerufen wird, wird nicht die in TFigur definierte Funktion benutzt, sondern die überschriebene ("override") Funktion bei TKreis.