5.10 Polymorphie
Polymorphie bedeutet Vielgestaltigkeit. Innerhalb der objektorientierten Programmierung bedeutet dieser Begriff, dass ein Objektverweis auf Objekte unterschiedlicher Art verweisen kann. Er ist anschließend in der Lage, den Abruf der jeweils zugehörigen Objektelemente zu unterstützen. Dies vergrößert die Flexibilität bei der Programmierung mit Objekten verwandter Klassen.
Im nachfolgenden Beispiel im Projekt Polymorphie werden Objekte zweier Klassen erzeugt. Eine der Klassen ist aus der anderen Klasse abgeleitet. Die Objekte werden anschließend über ein Feld von Verweisen auf Objekte der Basisklasse gemeinsam erreichbar gemacht. Innerhalb einer Schleife werden alle Objekte ausgegeben.
Zunächst die Basisklasse:
Public Class Fahrzeug
Dim bezeichnung As String
Dim geschwindigkeit As Integer
Sub New()
bezeichnung = "(leer)"
geschwindigkeit = 0
End Sub
Sub New(b As String, g As Integer)
bezeichnung = b
geschwindigkeit = g
End Sub
Overridable Function ausgabe() As String
ausgabe = vbCrLf &
"Bezeichnung: " & bezeichnung & vbCrLf &
"Geschwindigkeit: " & geschwindigkeit &
vbCrLf
End Function
End Class
Listing 5.22 Projekt »Polymorphie«, Basisklasse »Fahrzeug«
Zur Erläuterung:
- Die Klasse hat zwei Konstruktoren.
- Die Ausgabe-Methode wird mit Overridable als überschreibbar gekennzeichnet. Das bedeutet, dass sie in einer abgeleiteten Klasse überschrieben werden darf. Dies ist eine wichtige Voraussetzung für das polymorphe Verhalten.
Die abgeleitete Klasse:
Public Class PKW
Inherits Fahrzeug
Dim insassen As Integer
Sub New()
insassen = 0
End Sub
Sub New(b As String, g As Integer, i As Integer)
MyBase.New(b, g)
insassen = i
End Sub
Overrides Function ausgabe() As String
ausgabe = MyBase.ausgabe() &
"Insassen: " & insassen & vbCrLf
End Function
End Class
Listing 5.23 Projekt »Polymorphie«, abgeleitete Klasse »PKW«
Zur Erläuterung:
- Die Klasse hat ebenfalls zwei Konstruktoren.
- Die Ausgabe-Funktion wird mit Overrides als überschreibend gekennzeichnet. Das bedeutet, dass sie die gleichnamige Methode der Basisklasse überschreibt. Dies ist nur gestattet, wenn die betreffende Funktion der Basisklasse als Overridable gekennzeichnet ist.
Das Programm:
Public Class Form1
Private Sub cmdAnzeigen_Click(...) Handles ...
Dim vespa As New Fahrzeug("Roller", 35)
Dim schwalbe As New Fahrzeug("Moped", 45)
Dim fiat As New PKW("Limousine", 90, 4)
Dim porsche As New PKW("Sportwagen", 130, 1)
Dim sammlung(4) As Fahrzeug
Dim i As Integer
sammlung(0) = vespa
sammlung(1) = schwalbe
sammlung(2) = fiat
sammlung(3) = porsche
sammlung(4) = New Fahrzeug
For i = 0 To 4
lblAnzeige.Text &= sammlung(i).ausgabe()
Next
End Sub
End Class
Listing 5.24 Projekt »Polymorphie«, Nutzung der Klassen
Zur Erläuterung:
- Es werden jeweils zwei Objekte der beiden Klassen erzeugt und mit allen Eigenschaften initialisiert.
- Zusätzlich wird ein Feld von fünf Verweisen auf Objekte der Basisklasse deklariert. Diese Verweise haben noch kein Verweisziel, d. h. sie zeigen noch auf kein Objekt.
- Nacheinander werden die vier vorhandenen Objekte den vier ersten Verweisen zugewiesen. Dem fünften Verweis wird ein neues, leeres Objekt der Basisklasse zugewiesen.
- Bei der Ausgabe aller Feldelemente (siehe Abbildung 5.11) mithilfe einer Schleife wird jeweils die Methode ausgabe() aufgerufen. Zu den Verweisen wird jeweils die passende Methode des Objekts, auf das verwiesen wird, gefunden.
Abbildung 5.11 Fünf Verweise in einem Feld
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.