C#多态的问题
[code=C#][/code]
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace OOTest
{
public class Father
{
public virtual void TestVoice()
{
Console.WriteLine("Father_TestVoice");
}
public void Test()
{
Console.WriteLine("Father Test");
}
}
public class Son : Father
{
public override void TestVoice()
{
Console.WriteLine("Son_TestVoice");
}
public new void Test()
{
Console.WriteLine("Son Test");
}
public static void Main()
{
Father son = new Son(); //1
son.TestVoice(); //2
son.Test();
Thread.Sleep(30000);
}
}
}
最后的输出结果是:
Son_TestVoice
Father Test
第一个结果我知道原因,但是第二个结果我不知道具体是什么原因,为什么他不是调用的Son类中的Test方法呢?哪位大虾能告诉我,请说明详细一些。万分感谢!!!
------解决方案--------------------对于用子类实例化的父类,父类用virtual标记的方法会正确调用子类override的方法,但是对于子类中用new标记的方法,则还是会调用父类中的方法,因为对于父类来说,override才对其起作用,new对于父类,相当于子类的新方法。
------解决方案--------------------