class Program
{
static void Main(string[] args)
{
Person p = new Chinese();//子类转为父类,向上转型
/**
* p.Speak() 之前我一直搞不明白为什么会执行Person.Speak()
* 最近我觉得是因为在子类中用了new关键字,把父类的方法给隐藏掉,相当于子类的Speak方法是不属于父类的,和SpeakPTH同级.
* */
p.Speak();
p = new English();
p.Speak();//之所以调用English.Speak方法是因为把父类的Speak方法给重写了
Console.ReadKey();
}
}
class Person
{
public virtual void Speak()
{
Console.WriteLine("说话......");
}
public void Run()
{
Console.WriteLine("Running....");
}
}
class Chinese : Person
{
//相当于子类的Speak方法与父类的Speak方法没有关系
new public void Speak()
{
Console.WriteLine("说中国话......");
}
public void SpeakPTH()
{
Console.WriteLine("说普通话......");
}
}
class English : Person
{
public override void Speak()
{
Console.WriteLine("说英语话......");
}
}