PureBasic: Vererbung
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.