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.