Partager via


Polymorphisme d'héritage

Mise à jour : novembre 2007

La majorité des systèmes de programmation orientée objet assurent le polymorphisme via l'héritage. Le polymorphisme d'héritage implique une définition de méthodes dans une classe de base et leur substitution par de nouvelles implémentations dans des classes dérivées.

Vous pouvez par exemple définir une classe BaseTax qui propose des fonctionnalités de base pour calculer le taux de T.V.A. dans un état. Les classes dérivées de BaseTax, telles que CountyTax ou CityTax, peuvent implémenter des méthodes, telles que CalculateTax, si nécessaire.

Le polymorphisme est issu de la possibilité d'appeler la méthode CalculateTax d'un objet appartenant à une classe dérivée de BaseTax, sans connaître la classe à laquelle appartient cet objet.

Dans l'exemple suivant, la procédure TestPoly illustre le polymorphisme d'héritage :

' %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

Dans cet exemple, la procédure ShowTax accepte un paramètre intitulé Item de type BaseTax, mais vous pouvez également passer les classes dérivées de la classe BaseTax, comme CityTax. Cette conception présente l'avantage que vous pouvez ajouter de nouvelles classes dérivées de la classe BaseTax sans modifier le code client dans la procédure ShowTax.

Voir aussi

Concepts

Polymorphisme d'interface

Autres ressources

Design d'une hiérarchie d'héritage