class Program
{
static void Main(string[] args)
{
Car c1 = new Car();
c1.F();//通过new隐藏了父类的同名方法
Console.ReadKey();
c1.G();//重写了父类的G方法
Console.ReadKey();
Vehicle v1 = c1;
v1.F();//最终到底是调用CAR类还是调用父类VECHICLE类的F方法呢 //这个会调用父类的F方法,而不是子类的NEW同名方法
Console.ReadKey();
v1.G();//同上 //最终调用还是C1的重写方法G,这就是运行时状态决定,
Console.ReadKey();
}
}
public class Vehicle
{
//编译时多态性;是通过重载实现的,即方法重载和操作符重载
//运行时多态性,是直到系统运行时,才根据实际情况决定实现何种操作.这种多态性是通过虚成员实现
//编译多态性为我们提供了运行速度快,而运行时多态则有高度灵活和抽象的特点
public void F()
{
Console.WriteLine("vehicle类的F方法,它是非虚virtual方法");
}
public virtual void G()
{
Console.WriteLine("vehicle类的G方法,它是虚virtual方法");
}
}
class Car : Vehicle
{
new public void F() //
{
Console.WriteLine("通过NEW其实是隐藏了父类同名的方法F,而非重写");
}
public override void G()
{
Console.WriteLine("重写了vehicle类的G方法,实现多态性");
}
}