다음을 통해 공유


속성 및 메서드 재정의

업데이트: 2007년 11월

파생 클래스는 기본 클래스에 정의된 속성 및 메서드를 상속합니다. 이러한 항목은 파생 클래스에 적합한 경우 다시 사용할 수 있으므로 유용합니다. 기본 클래스의 속성 또는 메서드가 Overridable 키워드로 표시된 경우 파생 클래스의 멤버에 대한 구현을 새로 정의할 수 있습니다. Overrides 키워드로 파생 클래스의 멤버를 다시 정의하여 해당 멤버를 숨길 수 있습니다. 이 방법은 멤버를 "있는 그대로" 사용할 수 없는 경우에 유용합니다.

실제로 재정의된 멤버는 주로 다형성을 구현하는 데 사용됩니다. 자세한 내용은 다형성을 참조하십시오.

메서드 재정의에는 다음과 같은 규칙이 적용됩니다.

  • 기본 클래스에서 Overridable 키워드로 표시되어 있는 멤버만 재정의할 수 있습니다.

  • 기본적으로 속성 및 메서드는 NotOverridable입니다.

  • 재정의된 멤버는 기본 클래스에서 상속된 멤버와 같은 인수를 가져야 합니다.

  • 새로 구현된 멤버는 메서드 이름 앞에 MyBase를 지정하여 부모 클래스의 원본 구현을 호출할 수 있습니다.

    참고:

    오버로드, 재정의 및 숨기기는 혼동하기 쉬운 비슷한 개념입니다. 자세한 내용은 Visual Basic의 개체 소개를 참조하십시오.

예제

급료를 처리하는 클래스를 정의하려 한다고 가정합니다. 이 경우 주급을 계산하는 RunPayroll 메서드를 포함하는 일반 Payroll 클래스를 정의할 수 있습니다. 그런 다음 직원에게 보너스를 지불할 때 사용할 수 있는 좀 더 구체적인 BonusPayroll 클래스에 대한 기본 클래스로 Payroll을 사용할 수 있습니다.

BonusPayroll 클래스는 기본 Payroll 클래스에 정의되어 있는 PayEmployee 메서드를 상속하고 재정의할 수 있습니다.

다음 예제에서는 기본 클래스 Payroll과 파생 클래스 BonusPayroll을 정의하며 이 클래스는 상속된 메서드 PayEmployee를 재정의합니다. RunPayroll 프로시저는 Payroll 개체와 BonusPayroll 개체를 만든 다음 두 개체의 PayEmployee 메서드를 실행하는 함수 Pay에 전달합니다.

Const BonusRate As Decimal = 1.45D
Const PayRate As Decimal = 14.75D

Class Payroll
    Overridable Function PayEmployee( _
        ByVal HoursWorked As Decimal, _
        ByVal PayRate As Decimal) _
        As Decimal

        PayEmployee = HoursWorked * PayRate
    End Function
End Class

Class BonusPayroll
    Inherits Payroll
    Overrides Function PayEmployee( _
        ByVal HoursWorked As Decimal, _
        ByVal PayRate As Decimal) _
        As Decimal

        ' The following code calls the original method in the base 
        ' class, and then modifies the returned value.
        PayEmployee = MyBase.PayEmployee(HoursWorked, PayRate) * BonusRate
    End Function
End Class

Sub RunPayroll()
    Dim PayrollItem As Payroll = New Payroll
    Dim BonusPayrollItem As New BonusPayroll
    Dim HoursWorked As Decimal = 40

    MsgBox("Normal pay is: " & _
        PayrollItem.PayEmployee(HoursWorked, PayRate))
    MsgBox("Pay with bonus is: " & _
        BonusPayrollItem.PayEmployee(HoursWorked, PayRate))
End Sub

참고 항목

개념

오버로드된 속성 및 메서드

재정의 한정자

Visual Basic의 숨김 기능

기타 리소스

다형성