Hallo!
Ich habe nochmal eine Frage zur Polymorphie.
Es geht um die Änderung von (bspw.)
in
Im Entwicklerbuch Visual Basic 2010 steht dazu (S. 390): "Glauben sie, dass VB einen Fehler auslöst, da sie klasse2 als ErsteKlasse deklariert, dieser Objektvariablen anschließend aber eine Instanz von zweiter Klasse zugewiesen haben? Mitnichten! Diese Vorgehensweise ist nicht nur kein Fehler, Sie haben gerade sogar das wohl mächtigste Werkzeug der objektorientierten Programmierung kennen gelernt"(Anm.d.R.: Die Polymorphie).
Ich habe mir ein kleines Beispiel zusammengestellt:
Das Ergebnis ändert sich nicht, wenn man die Kommentierung hier:
tauscht.
Was ich verstehe ist, dass ich beim Deklarieren einer Objektvariable die Elternklasse verwenden kann und dann beim Instanzieren dieser Objektvarialben eine Instanz einer Kindsklasser der Elternklasse zuweisen kann. OK, aber was bringt mir das? Insbesondere, wie man am o.g. Beispiel sieht, da kommt ja eh das gleiche raus, ob ich jetzt die die Objektvariable als Eltern- oder Kindsklasse deklariere.
Wäre super, wenn mir das jemand erklären könnten, da es ja anscheinend eines der "wichtigesten Tools der OOP" ist, welches bei mir noch in der mit sieben Siegeln verschlossenen Toolbox verweilt. Auf das Klick-Event wartend...
Ruedi
Ich habe nochmal eine Frage zur Polymorphie.
Es geht um die Änderung von (bspw.)
in
Im Entwicklerbuch Visual Basic 2010 steht dazu (S. 390): "Glauben sie, dass VB einen Fehler auslöst, da sie klasse2 als ErsteKlasse deklariert, dieser Objektvariablen anschließend aber eine Instanz von zweiter Klasse zugewiesen haben? Mitnichten! Diese Vorgehensweise ist nicht nur kein Fehler, Sie haben gerade sogar das wohl mächtigste Werkzeug der objektorientierten Programmierung kennen gelernt"(Anm.d.R.: Die Polymorphie).
Ich habe mir ein kleines Beispiel zusammengestellt:
VB.NET-Quellcode
- Module Module1
- Sub Main()
- Dim player As New ZweiteKlasse
- System.Console.WriteLine()
- player.Play()
- Dim klasse1 As New ErsteKlasse
- System.Console.WriteLine()
- klasse1.Play()
- 'Dim klasse2 as ZweiteKlasse
- Dim klasse2 As ErsteKlasse
- klasse2 = New ZweiteKlasse
- System.Console.WriteLine()
- klasse2.Play()
- System.Console.WriteLine()
- System.Console.ReadLine()
- End Sub
- Class ErsteKlasse 'base Class
- Private strName As String 'strName as a private member
- Public intAge As Integer 'intAge as a public member
- Public Function getName()
- Return strName
- End Function
- Public Sub SetName(ByVal name As String)
- strName = name
- End Sub
- Public Overridable Sub Play()
- System.Console.WriteLine("I Play Nothing")
- End Sub
- End Class
- Class ZweiteKlasse 'derived Class
- Inherits ErsteKlasse
- Public strNationality As String 'derived classes member
- Function getNationality()
- Return strNationality
- End Function
- Public Overrides Sub Play()
- System.Console.WriteLine("I can Play cricket")
- End Sub
- End Class
- End Module
Das Ergebnis ändert sich nicht, wenn man die Kommentierung hier:
tauscht.
Was ich verstehe ist, dass ich beim Deklarieren einer Objektvariable die Elternklasse verwenden kann und dann beim Instanzieren dieser Objektvarialben eine Instanz einer Kindsklasser der Elternklasse zuweisen kann. OK, aber was bringt mir das? Insbesondere, wie man am o.g. Beispiel sieht, da kommt ja eh das gleiche raus, ob ich jetzt die die Objektvariable als Eltern- oder Kindsklasse deklariere.
Wäre super, wenn mir das jemand erklären könnten, da es ja anscheinend eines der "wichtigesten Tools der OOP" ist, welches bei mir noch in der mit sieben Siegeln verschlossenen Toolbox verweilt. Auf das Klick-Event wartend...
Ruedi