Hallo ich hoffe ihr könnt mir bei einem Verständnissproblem helfen betreffend der Vorteile bzw. Anwendung von Vererbung(Implementierung) von Schnittstellen gegenüber von der Vererbung von Klassen ist.
Um zu erläutern wo genau ich Probleme habe, will ich folgendes Beispiel behandeln:
Gegeben sind 2 Klassen Audi und BMW. Beide enthalten als Properties eine Durchschnittsgeschwindigkeit (Geschw_durch) und gefahrene Zeit (gefahrene_ZEit). Nun soll mit der Funktion "berechnen_weg()" der zurückgelegte Weg berechnet werden.
Dabei steht im Zentrumt eine Sub der Art:
Wobei für das Objekt Audi oder BMW stehen kann.
Bisher dachte ich das wäre nur über eine Schnittstelle möglich der Form:
Jedoch ist dies auch mit der simplen Klassenverebung möglich:
Dh. nach m.E sind die beiden Varianten funktionell ident.
Meine Frage ist: Was ist mit "Schnittstellen-Vererbung" möglich was nicht mit der "Klassen-Vererbung" geht?
Wäre super wenn ihr mein Beispiel weiterführen könnt, um den direkten Unterschied in deren Mächtigkeit zu zeigen.
Hier noch der vollständige Code des Beispiels.
Struktur des Beispiels:
Vererbung von Schnitstelle:
+Klassen Audi_S und Bmw_S inherits Klasse Auto_S
+Klasse Auto_S Implements Schnittstelle Iauto (dh. 2 Klassen erben von einer anderen Klasse die wiederum eine Schnittstelle implementiert hat)
Vererbung von Klasse:
+Klassen Audi_K und Bmw_S inherits Klasse Auto_K
Eine Form mit 4 Buttons
Gruß Foogo
Um zu erläutern wo genau ich Probleme habe, will ich folgendes Beispiel behandeln:
Gegeben sind 2 Klassen Audi und BMW. Beide enthalten als Properties eine Durchschnittsgeschwindigkeit (Geschw_durch) und gefahrene Zeit (gefahrene_ZEit). Nun soll mit der Funktion "berechnen_weg()" der zurückgelegte Weg berechnet werden.
Dabei steht im Zentrumt eine Sub der Art:
Wobei für das Objekt Audi oder BMW stehen kann.
Bisher dachte ich das wäre nur über eine Schnittstelle möglich der Form:
Jedoch ist dies auch mit der simplen Klassenverebung möglich:
Dh. nach m.E sind die beiden Varianten funktionell ident.
Meine Frage ist: Was ist mit "Schnittstellen-Vererbung" möglich was nicht mit der "Klassen-Vererbung" geht?
Wäre super wenn ihr mein Beispiel weiterführen könnt, um den direkten Unterschied in deren Mächtigkeit zu zeigen.
Hier noch der vollständige Code des Beispiels.
Struktur des Beispiels:
Vererbung von Schnitstelle:
+Klassen Audi_S und Bmw_S inherits Klasse Auto_S
+Klasse Auto_S Implements Schnittstelle Iauto (dh. 2 Klassen erben von einer anderen Klasse die wiederum eine Schnittstelle implementiert hat)
Vererbung von Klasse:
+Klassen Audi_K und Bmw_S inherits Klasse Auto_K
VB.NET-Quellcode
- '========================= Schnittstellenvererbung======================
- Public Class Schnittstelle
- Interface Iauto
- Property Geschw_durch As Long
- Property gefahrene_ZEit As Long
- Function berechnung_weg() As Long
- End Interface
- End Class
- Public Class Auto_S
- Implements Schnittstelle.Iauto
- Dim _gefahrene_ZEit As Long
- Dim _Geschw_durch As Long
- Public Function berechnung_weg() As Long Implements Schnittstelle.Iauto.berechnung_weg
- Return Geschw_durch * gefahrene_ZEit
- End Function
- Public Property gefahrene_ZEit As Long Implements Schnittstelle.Iauto.gefahrene_ZEit
- Get
- Return _gefahrene_ZEit
- End Get
- Set(value As Long)
- _gefahrene_ZEit = value
- End Set
- End Property
- Public Property Geschw_durch As Long Implements Schnittstelle.Iauto.Geschw_durch
- Get
- Return _Geschw_durch
- End Get
- Set(value As Long)
- _Geschw_durch = value
- End Set
- End Property
- End Class
- Public Class BMW_S
- Inherits Auto_S
- Public Sub New()
- Geschw_durch = 100
- gefahrene_ZEit = 100
- End Sub
- End Class
- Public Class Audi_S
- Inherits Auto_S
- Public Sub New()
- Geschw_durch = 100
- gefahrene_ZEit = 200
- End Sub
- End Class
- '==============================Klassenvererbung==================================
- Public Class Auto_K
- Dim _Geschw_durch As Long
- Dim _gefahrene_ZEit As Long
- Public Function berechnung_weg() As Long
- Return Geschw_durch * gefahrene_ZEit
- End Function
- Public Property gefahrene_ZEit As Long
- Get
- Return _gefahrene_ZEit
- End Get
- Set(value As Long)
- _gefahrene_ZEit = value
- End Set
- End Property
- Public Property Geschw_durch As Long
- Get
- Return _Geschw_durch
- End Get
- Set(value As Long)
- _Geschw_durch = value
- End Set
- End Property
- End Class
- Public Class BMW_K
- Inherits Auto_K
- Public Sub New()
- Geschw_durch = 100
- gefahrene_ZEit = 100
- End Sub
- End Class
- Public Class Audi_K
- Inherits Auto_K
- Public Sub New()
- Geschw_durch = 100
- gefahrene_ZEit = 200
- End Sub
- End Class
Eine Form mit 4 Buttons
VB.NET-Quellcode
- Public Class Form1
- '=================Mit Schnittstellenvererbung=====================
- Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
- Dim bmw_s As New BMW_S()
- Call Strecke_S(bmw_s)
- End Sub
- Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
- Dim audi_s As New Audi_S()
- Call Strecke_S(audi_s)
- End Sub
- Sub Strecke_S(ByVal Auto As Schnittstelle.Iauto)
- MessageBox.Show(Auto.berechnung_weg)
- End Sub
- '=================Mit Klassenvererbung=============================
- Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
- Dim bmw_k As New BMW_K()
- Call Strecke_K(bmw_k)
- End Sub
- Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
- Dim audi_k As New Audi_K()
- Call Strecke_K(audi_k)
- End Sub
- Sub Strecke_K(ByVal Auto As AutoK)
- MessageBox.Show(Auto.berechnung_weg)
- End Sub
- End Class
Gruß Foogo