Auf Vererbung basierender Polymorphismus
Aktualisiert: November 2007
Die meisten objektorientierten Programmiersysteme verfügen über Polymorphismus durch Vererbung. Auf Vererbung basierender Polymorphismus beinhaltet das Definieren von Methoden in einer Basisklasse sowie deren Überschreibung mit neuen Implementierungen in abgeleiteten Klassen.
Sie können z. B. die Klasse BaseTax definieren, die die Basisfunktion für die Berechnung der Umsatzsteuer in einem Land bzw. einer Region beinhaltet. Von BaseTax abgeleitete Klassen wie CountyTax oder CityTax können gegebenenfalls Methoden wie z. B. CalculateTax implementieren.
Polymorphismus entsteht, wenn Sie die CalculateTax-Methode eines Objekts aufrufen, das zu einer beliebigen, von BaseTax abgeleiteten Klasse gehört, ohne zu wissen, welcher Klasse das Objekt angehörte.
Die TestPoly-Prozedur im folgenden Beispiel zeigt einen auf Vererbung basierenden Polymorphismus:
' %5.3 State tax
Const StateRate As Double = 0.053
' %2.8 City tax
Const CityRate As Double = 0.028
Public Class BaseTax
Overridable Function CalculateTax(ByVal Amount As Double) As Double
' Calculate state tax.
Return Amount * StateRate
End Function
End Class
Public Class CityTax
' This method calls a method in the base class
' and modifies the returned value.
Inherits BaseTax
Private BaseAmount As Double
Overrides Function CalculateTax(ByVal Amount As Double) As Double
' Some cities apply a tax to the total cost of purchases,
' including other taxes.
BaseAmount = MyBase.CalculateTax(Amount)
Return CityRate * (BaseAmount + Amount) + BaseAmount
End Function
End Class
Sub TestPoly()
Dim Item1 As New BaseTax
Dim Item2 As New CityTax
' $22.74 normal purchase.
ShowTax(Item1, 22.74)
' $22.74 city purchase.
ShowTax(Item2, 22.74)
End Sub
Sub ShowTax(ByVal Item As BaseTax, ByVal SaleAmount As Double)
' Item is declared as BaseTax, but you can
' pass an item of type CityTax instead.
Dim TaxAmount As Double
TaxAmount = Item.CalculateTax(SaleAmount)
MsgBox("The tax is: " & Format(TaxAmount, "C"))
End Sub
In diesem Beispiel akzeptiert die ShowTax-Prozedur den Parameter Item des Typs BaseTax; Sie können aber auch eine andere, von der BaseTax-Klasse abgeleitete Klasse übergeben, z. B. CityTax. Der Vorteil dieses Entwurfs liegt darin, dass Sie von der BaseTax-Klasse abgeleitete neue Klassen hinzufügen können, ohne den Clientcode in der ShowTax-Prozedur zu ändern.
Siehe auch
Konzepte
Auf Schnittstellen basierender Polymorphismus