在下面的C#代碼段爲什麼編譯器不能解析方法覆蓋?
public class Animal
{
public virtual void MakeSound()
{
Console.WriteLine("Animal sound");
}
}
public class Dog:Animal
{
public override void MakeSound()
{
Console.WriteLine("Dog sound");
}
}
class Program
{
static void Main(string[] args)
{
Animal an = new Dog();
an.MakeSound();
Console.ReadLine();
}
}
被稱爲在運行時確定的方法。爲什麼編譯器無法弄清楚,調用哪個方法?
爲什麼編譯器看不到an
引用了Dog
對象,然後從該類中選擇方法?
運行時如何確定要調用哪個方法?
你有沒有聽說過抽象? –
我說狗的聲音,如果我編譯它,這對我來說似乎是完全不錯的 – BugFinder
他們沒有問在運行時的輸出是什麼。事實上,他們在實際問題中明確表示他們知道運行時正在發生的事情。問題是爲什麼編譯器不知道'an'是編譯時的'Dog'。 – Nick