다음을 통해 공유


상속 기반 다형성

업데이트: 2007년 11월

대부분의 개체 지향 프로그래밍 시스템에서는 상속을 통해 다형성을 제공합니다. 상속 기반 다형성를 이루려면 기본 클래스에서 메서드를 정의한 다음 파생 클래스에서 새로운 구현으로 재정의해야 합니다.

예를 들어, state의 판매세를 계산하기 위한 기본 기능을 제공하는 BaseTax 클래스를 정의할 수 있습니다. CountyTax 또는 CityTax와 같이 BaseTax에서 파생되는 클래스는 CalculateTax와 같은 메서드를 적절히 구현할 수 있습니다.

다형성은 개체가 속해 있던 클래스를 알지 못해도 BaseTax에서 파생된 클래스에 속하는 개체의 CalculateTax 메서드를 호출할 수 있다는 사실에 기반을 둡니다.

다음 예제의 TestPoly 프로시저에서는 상속 기반 다형성을 보여 줍니다.

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

이 예제에서 ShowTax 프로시저는 BaseTax 형식의 매개 변수 Item을 취하지만 CityTax와 같이 BaseTax 클래스에서 파생된 클래스를 전달할 수도 있습니다. 이렇게 디자인하면 ShowTax 프로시저에서 클라이언트 코드를 변경하지 않고도 BaseTax 클래스에서 파생된 새 클래스를 추가할 수 있다는 이점이 있습니다.

참고 항목

개념

인터페이스 기반 다형성

기타 리소스

상속 계층 구조 디자인