Partilhar via


Herança-Based polimorfismo

A maioria dos sistemas de programação orientada a objeto fornecem polimorfismo através de herança.Polimorfismo com herança envolve define os métodos na classe base e substituindo-os com novas implementações em classes derivadas.

Por exemplo, você pode definir uma classe, BaseTax, que fornece funcionalidade básica para computação imposto sobre vendas em um estado. Classes derivadas de BaseTax, sistema autônomo CountyTax ou CityTax, pode implementar métodos, sistema autônomo CalculateTax conforme apropriado.

Polimorfismo vem do fato de que você poderia chamar o CalculateTax método de um objeto que pertencem a qualquer classe que deriva BaseTax, sem saber que o objeto de classe pertencia.

The TestPoly procedimento no exemplo a seguir demonstra herança com polimorfismo:

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

Neste exemplo, a ShowTax procedimento aceita um parâmetro nomeado Item do tipo BaseTax, mas você também pode passar qualquer uma das classes derivadas da BaseTax classe, sistema autônomo CityTax. A vantagem desse design é que você pode adicionar novas classes derivadas do BaseTax classe sem alterar o código do cliente na ShowTax procedimento.

Consulte também

Conceitos

Interface-Based polimorfismo

Outros recursos

Criando uma hierarquia de herança