オーバーロードがコンパイル時ポリモーフィズムと呼ばれ、オーバーライドがランタイム ポリモーフィズムと呼ばれるのはなぜですか? たとえば、次のコードを見てください。
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 行目では、プログラムがそのままの状態でコンパイル エラーが発生します。ただし、 Animal クラスに Eat(String) を追加すると、コンパイルされます。この背後にある理由は何ですか?
また、次の投稿の回答には、「Overloads キーワードはオプションですが、1 つのメソッドに使用する場合は、そのメソッドのすべてのオーバーロードに使用する必要があります。」 -vb-net のキーワード。問題の関数もオーバーライドする場合、これが当てはまるとは限りません。これは事実ですか?
インターフェイスでポリモフィズムを使用する大規模なプログラムを調べています。上記のクラスは、説明のための例として提供しています。