接口的理解与应用
接口就是指只包含虚成员的虚类。
(1) 虚类,表明了接口是不能够被直接实例化的。也就是说,接口只是一个抽象概念。比如我们说车可以跑,人可以跑,马可以跑。我们可以看到实例化的车、人、马。但是我们可以定义一个“会跑的物质”。他可以是车,也可以使人、马,但是我们却不能说“这个东西就是一个会跑得物质,但是它并不是车、人或者马。”
(2) 只包含虚成员,表明了接口只是说明了它具有什么样的功能,可以提供什么样的信息。但是这些功能和信息究竟是什么,如何提供我们无法得知。就像是“会跑的物质”,我们知道它可以跑,但是具体他怎么跑我们就不知道了。
之所以说接口可以部分替代多继承,就是因为VB.NET只允许一个类继承自另一个,且只能是这个类;但是一个类可以实现一个或多个接口。由于接口不实现成员,只声名成员,所以也就不存在多继承的路径问题了。
Public Interface IfTest
Function DisplayName() As String
End Interface
Public Class Display1
Implements IfTest
Public Function DisplayName() As String Implements IfTest.DisplayName
Return "TEST1"
End Function
End Class
Public Class Display2
Implements IfTest
Public Function DisplayName() As String Implements IfTest.DisplayName
Return "TEST2"
End Function
End Class
Public Class Display3
Implements IfTest
Public Function DisplayName() As String Implements IfTest.DisplayName
Return "TEST3"
End Function
End Class
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Iftest As IfTest
Iftest = New Display2
MsgBox(Iftest.DisplayName())'这里展示了接口的应用 msgbox "TEST2"
Dim Display As Display1
Display = New Display2'错误了 Display只能对Display1
'error
End Sub
Function DisplayName() As String
End Interface
Public Class Display1
Implements IfTest
Public Function DisplayName() As String Implements IfTest.DisplayName
Return "TEST1"
End Function
End Class
Public Class Display2
Implements IfTest
Public Function DisplayName() As String Implements IfTest.DisplayName
Return "TEST2"
End Function
End Class
Public Class Display3
Implements IfTest
Public Function DisplayName() As String Implements IfTest.DisplayName
Return "TEST3"
End Function
End Class
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Iftest As IfTest
Iftest = New Display2
MsgBox(Iftest.DisplayName())'这里展示了接口的应用 msgbox "TEST2"
Dim Display As Display1
Display = New Display2'错误了 Display只能对Display1
'error
End Sub