在下面的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