Referenz - EXTENDS
Syntax: TYPE kindKlasse EXTENDS basisKlasse
Typ: Anweisung
Kategorie: Klassen
EXTENDS wird in Verbindung mit Vererbung bei TYPE und UNION verwendet. Dabei gibt das Schlüsselwort an, dass die eigene Klasse die Attribute und Methoden einer bereits bestehenden erbt, also erhält, ohne dass man diese zusätzlich angeben müsste.
Es ist auch möglich, von ZSTRING und WSTRING zu erben. Ein UDT, das als EXTENDS ZSTRING (bzw. als EXTENDS WSTRING) deklariert wird, ist damit - eine entsprechende CAST-Funktion vorausgesetzt - vollständig kompatibel zu Stringfunktionen wie STRPTR/SADD, SELECT CASE, TRIM oder MID, wo sie als ZSTRING (bzw. WSTRING) behandelt werden. LEN gibt die Größe des UDTs zurück, kann aber passend überladen werden.
Nicht möglich ist im Moment noch der Einsatz von LEFT, RIGHT und die Umwandlungsfunktionen VAL, VALINT usw.
Beispiel 1:
Type Haustier Extends Object
As Integer beine = 4
As Integer schwanz = 1
End Type
Type Hund Extends Haustier
As Integer anhaenglich = 1
Declare Sub gibLaut
End Type
Sub Hund.gibLaut
Print "Wuff!"
End Sub
Type Chihuahua Extends Hund
Declare Sub gibLaut
End Type
Sub Chihuahua.gibLaut
Print "Klaeffklaeff!"
End Sub
Type Bernhardiner Extends Hund
As Integer gutmuetig = 1
End Type
'#####################################################
Dim benno As Bernhardiner, husky As Chihuahua
Print "Benno hat " & benno.beine & " Beine und " & benno.schwanz & " Schwanz."
Print "Benno ist gutmuetig (Wert " & benno.gutmuetig & ")."
benno.gibLaut
Print
Print "Husky hat " & husky.beine & " Beine und " & husky.schwanz & " Schwanz."
husky.gibLaut
Print
Sleep
Ausgabe:
Benno hat 4 Beine und 1 Schwanz.
Benno ist gutmuetig (Wert 1).
Wuff!
Husky hat 4 Beine und 1 Schwanz.
Klaeffklaeff!
Erläuterung: Sowohl Benno als auch Husky erben die Attribute 'beine' und 'schwanz' vom Elternobjekt. 'gutmuetig' steht nur Benno zur Verfügung. Dafür besitzt Husky eine eigene 'gibLaut'-Methode, während Benno auf die Methode des Elternobjekts zugreift.
Beispiel 2: Erben von einem ZSTRING
TYPE myZstring EXTENDS ZSTRING
PUBLIC:
DECLARE CONSTRUCTOR (BYREF z AS CONST ZSTRING = "")
DECLARE OPERATOR CAST BYREF AS CONST ZSTRING
DECLARE OPERATOR LET (BYREF z AS CONST ZSTRING)
Private:
DIM AS STRING s
End Type
CONSTRUCTOR myZstring(BYREF z AS CONST ZSTRING = "")
THIS.s = z
END CONSTRUCTOR
OPERATOR myZstring.CAST () BYREF AS CONST ZSTRING
RETURN *STRPTR(THIS.s)
END OPERATOR
OPERATOR myZstring.LET(BYREF z AS CONST ZSTRING)
THIS.s = z
END OPERATOR
OPERATOR LEN(z AS myZstring) AS INTEGER
RETURN LEN(STR(z))
END OPERATOR
DIM AS myZstring z = "FreeBASIC"
z &= "-Compiler"
PRINT "Das Wort '" & z & "' ist " & LEN(z) & " Zeichen lang."
PRINT "Sein erstes Zeichen besitzt den ASCII-Code " & ASC(z) & "."
PRINT "Teilstring MID(z, 5, 5): " & MID(z, 5, 5)
SLEEP
Ausgabe:
Das Wort 'FreeBASIC-Compiler' ist 18 Zeichen lang.
Sein erstes Zeichen besitzt den ASCII-Code 70.
Teilstring MID(z, 5, 5): BASIC
Unterschiede zu QB: neu in FreeBASIC
Unterschiede zu früheren Versionen von FreeBASIC:
- EXTENDS existiert seit FreeBASIC v0.24.
- Seit FreeBASIC v1.07.0 kann auch von ZSTRING und WSTRING geerbt werden.
Unterschiede unter den FB-Dialektformen:
In der Dialektform -lang qb steht EXTENDS nicht zur Verfügung und kann nur über __EXTENDS aufgerufen werden.
Siehe auch:
TYPE (UDT), UNION, BASE, OBJECT, IS (Vererbung), Objektorientierung
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|