LKG/Inf 11 2011/Vererbung

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Pascal</language>
=== Vorraussetzung ===
Vorraussetzung für Vererbung ist eine Hierarchie:
[[Bild:Mschubert_Grafik_oop_hierarchie_figur_zu_rechteck.png]]

* die Nachkommen einer Klasse erben automatisch Datenfelder und Methoden
* des Nachfolgers Methoden können verändert werden
* auch neue Methoden und Datenfelder sind möglich
* die beerbte Klasse heißt "Elternklasse" - sie vererbt an die "Kindklasse"

=== Syntax ===
-> Name der Elternklasse in Klammern (TNameElternKlasse)

<code id="5137030896295">type
  TNameKlasse2 = class(TNameElternKlasse)</code>


'''Bsp (Auszüge):'''

<code id="51370308962fd">type
 TFigur=class
    function ausgabe:string;
 end;
 TPunkt=class(TFigur)
    x,y:integer;
    constructor create(x_neu,y_neu : integer);
    function getx:integer;
    function gety:integer;
    function zeige:string;
 end;
 TKreis=class(TPunkt)
    r: integer;
    constructor create(x_neu,y_neu,r_neu : integer);
    function getr:integer;
    function zeige:string;
 end;
 TQuadrat=class(TPunkt)
    a:integer;
 end;
 TRechteck=class(TQuadrat)
    b:integer;
 end;</code>


=== Initialisieren ===
Wie gewohnt in zwei Schritten (Deklaration und Initialisierung):
<code id="5137030896357">var
  p1:tpunkt;
  p2:tpunkt;
  p3:tpunkt;
  k1:tkreis;
  r1:trechteck;
  ...

  p1:=tpunkt.create(1,1);
  p2:=tpunkt.create(2,6);
  p3:=tpunkt.create(1,7);
  k1:=tkreis.create(2,4,3);
  r1:=trechteck.create(5,5,2,3);</code>


* tkreis-Definition enthält nur r (Radius), kann aber auch x und y nutzen (Erbung von Datenfeldern)
* Erbung von Methoden: Edit1.Text:=tkreis.ausgabe;


Neben '''private''' und '''public''' gibt es nun noch '''protected''': Während private die Nutzung von Methoden für Nachfolgerklassen untersagt, dürfen die Kindklassen bei protected diese Verwenden.