5.4 Konstruktor
Konstruktoren dienen dazu, Objekte bei ihrer Erzeugung mit Werten zu versehen. Es kann pro Klasse mehrere Konstruktoren geben, wenn Sie es dem Benutzer der Klasse ermöglichen möchten, seine Objekte auf verschiedene Art und Weise zu erzeugen.
Ein Konstruktor wird in der Klasse wie eine Methode vereinbart. Er hat immer den Namen New. Im nachfolgenden Beispiel (Projekt Konstruktor) wurde die Klasse Fahrzeug wiederum verändert, mit dem besonderen Augenmerk auf Konstruktoren.
Zunächst die Klasse:
Public Class Fahrzeug
Dim bezeichnung As String
Dim geschwindigkeit As Integer
Sub New()
bezeichnung = "(leer)"
geschwindigkeit = 0
End Sub
Sub New(b As String)
bezeichnung = b
geschwindigkeit = 0
End Sub
Sub New(g As Integer)
bezeichnung = "(leer)"
geschwindigkeit = g
End Sub
Sub New(b As String, g As Integer)
bezeichnung = b
geschwindigkeit = g
End Sub
Function ausgabe() As String
ausgabe = "Bezeichnung: " & bezeichnung &
vbCrLf & "Geschwindigkeit: " &
geschwindigkeit & vbCrLf
End Function
Sub beschleunigen(wert As Integer)
geschwindigkeit += wert
End Sub
End Class
Listing 5.6 Projekt »Konstruktor«, Definition der Klasse
Zur Erläuterung:
- Fahrzeuge haben nun zwei Eigenschaften: eine Bezeichnung (mit dem Datentyp String) und eine Geschwindigkeit (mit dem Datentyp Integer).
- Es sind vier Konstruktormethoden vereinbart, diese unterscheiden sich nicht durch ihren Namen (New), aber durch Anzahl und Datentyp der Parameter. Durch diese Unterscheidung kann das Programm bei der Objekterzeugung erkennen, welche der vier Konstruktormethoden verwendet werden soll.
- Man bezeichnet dies als Methodenüberladung. Außer der Konstruktormethode können auch andere Methoden auf diese Weise überladen werden. Dies ist eine häufige Vorgehensweise: Man macht etwas mit dem Objekt, sendet dabei bestimmte Daten und das Objekt weiß aufgrund der Klassendefinition und der verschiedenen Methodendefinitionen, wie es mit den Daten verfahren soll.
- Der erste Konstruktor erwartet keine Parameter. Die beiden Eigenschaften werden mit (leer) und 0 vorbesetzt.
- Der zweite Konstruktor erwartet eine Zeichenkette. Diese wird der Bezeichnung zugewiesen. Die Geschwindigkeit wird mit 0 vorbesetzt.
- Analog dazu erwartet der dritte Konstruktor eine Integer-Zahl. Diese wird der Geschwindigkeit zugewiesen. Die Bezeichnung wird mit (leer) vorbesetzt.
- Im vierten Konstruktor, der eine Zeichenkette und eine Integer-Zahl erwartet, werden beide Eigenschaften mit den gewünschten Werten vorbesetzt.
- Mithilfe der Ausgabemethode werden beide Eigenschaften kommentiert ausgegeben.
Das Programm (Projekt Konstruktor) kann diese Klasse jetzt wie folgt nutzen:
Public Class Form1
Private Sub cmdAnzeigen_Click(...) Handles ...
Dim vespa As New Fahrzeug
Dim schwalbe As New Fahrzeug("Moped")
Dim yamaha As New Fahrzeug(50)
Dim honda As New Fahrzeug("Motorrad", 75)
lblAnzeige.Text = vespa.ausgabe() & vbCrLf &
schwalbe.ausgabe() & vbCrLf &
yamaha.ausgabe() & vbCrLf &
honda.ausgabe()
End Sub
End Class
Listing 5.7 Projekt »Konstruktor«, Benutzung der Klasse
Zur Erläuterung:
- Es werden vier Objekte der Klasse Fahrzeug erzeugt und ausgegeben, siehe Abbildung 5.4. Jedes der Objekte nutzt einen anderen Konstruktor.
- Während der Codierung erscheint nach Eingabe von New Fahrzeug ein IntelliSense-QuickInfo. Darin werden dem Entwickler die vier Möglichkeiten zur Objekterzeugung, also die vier Konstruktoren mit Anzahl und Typ der Parameter, zur Auswahl angeboten. Dieses Verhalten kennen wir schon von der Benutzung der vordefinierten Methoden.
- Sobald eigene Konstruktoren definiert sind, können nur noch diese genutzt werden. Falls es keine eigenen Konstruktoren gibt, wird ein interner, parameterloser Konstruktor verwendet, wie im ersten Beispiel dieses Abschnitts.
- Bei der Nutzung des eigenen, parameterlosen Konstruktors (siehe Objekt vespa) werden gar keine Klammern hinter dem Namen der Klasse angegeben.
Abbildung 5.4 Vier Objekte nach der Konstruktion
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.