实例025类的多态性

       子类在继承基类时,会得到基类所有的接口属性、字段和方法。但有时子类中定义的特有属件和方法往让与基类中继承得到的接口属性或方法同名。VB.NET允许在子类中使用与基类接口属性或方法同名的属性及方法,即允许在一个类中,相同名字的属性或者方法能够通过不同的代码,完成不同的功能,这样就实现了类的多态性。多态性提高了子类的灵活程度和程序的实用性。
    要在子类中使用与父类属性或方法同名但功能不同的属性或方法,一个简单的方法是把原来基类中定义的属性或方法覆盖掉。换成子类的相关代码,关键字Overrids即用于属性或方法的覆盖。
 

Module Module1
    Public Class 人员
        Protected MyWords As String

        Public Overridable Property Words() As String
            Get
                Return MyWords
            End Get
            Set(ByVal value As String)
                MyWords = value
            End Set
        End Property

        Public Overridable Sub Speak()
            MsgBox(MyWords, MsgBoxStyle.Critical, "基类")
        End Sub
    End Class

    Public Class 售货员
        Inherits 人员

        Public Overrides Property Words As String
            Get
                Return MyBase.Words
            End Get
            Set(ByVal value As String)
                Select Case value
                    Case "你好", "谢谢", "再见", "欢迎再来", "Bye Bye"
                        MyWords = value
                    Case Else
                        MsgBox("请用文明用语,刚才的话被取消", MsgBoxStyle.OkOnly, "售货员")
                End Select
            End Set
        End Property
    End Class

    Public Class 顾客
        Inherits 人员
        Public Overrides Sub Speak()
            If MyWords = "" Then
                MsgBox("你好,我要买东西", MsgBoxStyle.Information, "顾客")
                Words = "谢谢"
            Else
                MsgBox(MyWords, MsgBoxStyle.Information, "顾客")
            End If
        End Sub
    End Class


    Sub Main()
        Dim Guest As New 顾客
        Dim Salesman As New 售货员
        Salesman.Words = "干什么" '被取消
        Salesman.Words = "你好"
        Salesman.Speak()
        Guest.Speak()
        Guest.Speak()

        Salesman.Words = "不用谢"
        Salesman.Speak()
        Guest.Words = "再见"
        Guest.Speak()

        Salesman.Words = "欢迎再来"
        Salesman.Speak()

        Console.Read()
    End Sub

End Module
 

发布了146 篇原创文章 · 获赞 0 · 访问量 2753

猜你喜欢

转载自blog.csdn.net/ngbshzhn/article/details/105544679