상속 기반 다형성
업데이트: 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 클래스에서 파생된 새 클래스를 추가할 수 있다는 이점이 있습니다.