私はJavaのバックグラウンドを持っています。以下のコードを見てください (私がかつて読んだ Java の本から抜粋した例で、コードは .NET に変換されています)。
Public Class Animal
Public Overridable Sub Eat()
MsgBox("Animal Eat no arguement")
End Sub
End Class
Public Class Horse
Inherits Animal
Public 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
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 New Horse
a1.Eat()
a2.Eat()
a2.Eat("Fruit") 'line 5
End Sub
End Class
form_load の 5 行目でコンパイル時エラーが発生すると予想されます。Java では、コンパイラは参照を見て、Animal に文字列を取る Eat メソッドがないことを確認します。.NET でコンパイル エラーが発生しないのはなぜですか?
更新 上記のコードにエラーがあります。回答者が指摘するように; a2 は Horse への参照であり、Horse のインスタンスです。したがって、5行目でコンパイル時エラーが発生しないのはなぜですか。a2 が動物を参照して馬のインスタンスを作成した場合、コンパイル時エラーが発生します (Java と一致)。