为什么重载称为编译时多态,而重载称为运行时多态?例如,看看下面的代码:
Public Class Animal
Public Overridable Overloads Sub Eat()
MsgBox("Animal Eat no arguement")
End Sub
Public Overridable Sub Drink()
MsgBox("Animal drink arguement")
End Sub
End Class
Public Class Horse
Inherits Animal
Public Overloads Overrides Sub Eat()
MsgBox("Horse Eat no arguement")
End Sub
Public Overloads Sub Eat(ByVal food As String)
MsgBox("Horse Eat food arguement")
End Sub
Public Overloads Overrides Sub Drink()
MsgBox("Animal drink arguement")
End Sub
End Class
Public Class Form1
Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim a1 As New Animal
Dim a2 As Animal
a2 = New Horse
a1.Eat()
a2.Eat("Fruit") 'line 6
End Sub
End Class
就程序而言,第 6 行将导致编译时错误。但是,如果我将 Eat(String) 添加到动物类,那么它将编译。这背后的原因是什么?
以下帖子中的答案还说:“Overloads 关键字是可选的,但如果将它用于一种方法,则必须将它用于该方法的所有重载:”http://stackoverflow.com/questions/1173257/overloads -vb-net 中的关键字。如果有问题的功能也覆盖,我并不总是发现这种情况。是这样吗?
我正在查看一个使用多态性和接口的大型程序。出于说明目的,我提供了上面的类作为示例。