Was tut man, wenn man einen Menschen hat, der Kung-Fu kämpfen kann, also etwas tun kann, dass nicht jeder Mensch kann. Jetzt könnte man natürlich eine komplett neue Klasse anlegen, dies ist aber ineffizient. Hier kommt Vererbung ins Spiel. Der Kämpfer hat natürlich noch auch alle Eigenschaften eines normalen Menschens, also ein Alter und einen Namen. Man erstellt nun eine Klasse, die von der ersten erbt.
; Listing 41: Vererbung
Class Mensch
Mensch(alter.l = 0, name.s = "")
Release()
set_alter(alter.l)
get_alter.l()
set_name(name.s)
get_name.s()
alter.l
name.s
EndClass
Procedure Mensch\Mensch(alter.l = 0, name.s = "")
This\alter = alter
This\name = name
EndProcedure
Procedure Mensch\set_alter(alter.l)
This\alter = alter
EndProcedure
Procedure.l Mensch\get_alter()
ProcedureReturn This\alter
EndProcedure
Procedure Mensch\set_name(name.s)
This\name = name
EndProcedure
Procedure.s Mensch\get_name()
ProcedureReturn This\name
EndProcedure
Class Kaempfer Extends Mensch
Kaempfer()
Release()
kaempfen()
EndClass
Procedure Kaempfer\Kaempfer()
This\Base(70, "Bruce")
EndProcedure
Procedure Kaempfer\kaempfen()
PrintN("Hai Ya!")
EndProcedure
*bruce.Kaempfer = NewObject Kaempfer()
OpenConsole()
PrintN("Name: "+*bruce\get_name())
PrintN("Alter: "+Str(*bruce\get_alter()))
*bruce\kaempfen()
DeleteObject *bruce
Delay(2000)
Ausgabe: Name: Bruce Alter: 70 Hai Ya!
Die Vererbung wird durch das Schlüsselwort Extend eingeleitet, hinter das man die Elternklasse schreibt. Die Klassendeklaration funktioniert dann wieder auf die gleiche Weise. Bei der Methodendefinition ist zu beachten, dass der Konstruktor den Konstruktor der Elternklasse aufrufen muss, da diesem Argumente übergeben werden sollen. Wenn der Konstruktor der Elternklasse Argumente ohne Standardwert erwartet, ist dieser Aufruf obligatorisch! Man sieht, dass die Objektinitialisierung ebenfalls gleich ist. Außerdem kann über den Zeiger auch auf die Methoden der Elternklasse zugegriffen werden. Vererbung ist also ein sinnvoller Weg, um viele Code-Zeilen zu sparen.