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

Weitere Ressourcen

Entwerfen einer Vererbungshierarchie