Referenz - ABSTRACT
Syntax:
TYPE Typname EXTENDS Elterntyp
DECLARE ABSTRACT {SUB|FUNCTION|PROPERTY|OPERATOR} ...
END TYPE
Typ: Klausel
Kategorie: Klassen
ABSTRACT ist eine spezielle Form von VIRTUAL. Im Gegensatz zu virtuellen Methoden wird bei abstrakten kein Methodenkörper (body) geschrieben, also der eigentliche Code, der die Methode implementiert. Dadurch können sog. Interfaces erstellt werden, die von erbenden Klassen implementiert werden.
Damit eine abstrakte Methode also aufgerufen werden kann, muss sie durch die erbende Klasse überschrieben und implementiert werden, da es sonst zu einem Programmabsturz kommt.
Konstruktoren können nicht abstrakt sein, da sie auch nicht virtuell sein können. Siehe dazu VIRTUAL. Weiterhin können auch Destruktoren nicht abstrakt sein, da es stets möglich sein muss, den Speicher einer Variablen freizugeben.
Beachte:
In einer mehrstufigen Vererbungshierarchie kann eine überschriebene Methode auf jeder Ebene als abstrakt, virtuell oder normal deklariert werden. Werden die Varianten gemischt, gilt folgende Reihenfolge von oben nach unten in der Hierarchie: Abstrakt -> Virtuell -> Normal.
Beispiel:
Type Hello Extends Object
Declare Abstract Sub hi
End Type
Type HelloEnglish Extends Hello
Declare Sub hi
End Type
Type HelloFrench Extends Hello
Declare Sub hi
End Type
Type HelloGerman Extends Hello
Declare Sub hi
End Type
Sub HelloEnglish.hi
Print "Hello!"
End Sub
Sub HelloFrench.hi
Print "Salut!"
End Sub
Sub HelloGerman.hi
Print "Hallo!"
End Sub
Randomize
Dim As Hello Ptr h
For i As Integer = 0 To 9
Select Case Int(Rnd*3) + 1
Case 1
h = New HelloFrench
Case 2
h = New HelloGerman
Case Else
h = New HelloEnglish
End Select
h->hi( )
Delete h
Next
Sleep
Vergleich zu anderen Sprachen:
Abstrakte Methoden werden in C++ als "pure virtual" bezeichnet. Anders als in FreeBASIC erlaubt es C++, dass "pure virtuals" einen Methodenkörper besitzen.
Unterschiede zu QB: neu in FreeBASIC
Unterschiede zu früheren Versionen von FreeBASIC: existiert seit FreeBASIC v0.90.0
Unterschiede unter den FB-Dialektformen: nur in der Dialektform -lang fb verfügbar
Siehe auch:
VIRTUAL, TYPE, EXTENDS, OBJECT, Objektorientierung
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|