子类在继承基类时,会得到基类所有的接口属性、字段和方法。但有时子类中定义的特有属件和方法往让与基类中继承得到的接口属性或方法同名。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