关于虚方法。不怎么理解
程序代码:using System;
public class FatherClass//定义基类
{
public void N()//基类的非虚方法
{
Console.WriteLine("调用基类的非虚方法N");
}
public virtual void V()//基类的虚方法
{
Console.WriteLine("调用基类的虚方法V");
}
}
public class SonClass : FatherClass//定义派生类
{
public new void N()//new关键字讲覆盖基类的同名方法N()
{
Console.WriteLine("调用派生类的非虚方法N");
}
public override void V()
{
Console.WriteLine("调用派生类的虚方法V");
}
}
public class App//应用类
{
public static void Main()
{
FatherClass fc=new FatherClass();//基类对象
SonClass sc = new SonClass();//派生类对象
fc=sc;//怎么这句加了跟没加是一样的啊??????????????
fc.N();//调用基类的N()方法
sc.N();//由于有new关键字修饰N()方法,所以本处调用的的是派生类的N()方法
fc.V();
sc.V();
Console.ReadKey();
}
}
书上解释fc=sc只这样的:在运行时先fc=sc,所以调用的对象是fc现在实际所属类sc的方法,而不是fc被定义类的方法(红色部分不是很理解),如果这样的话怎么第一个输出的结果是“调用基类的非虚方法N呢”接着又说,程序中的对非虚方法的调用是在编译时已经确定了的,所以fc.N()sc,N()调用的是基类中的非虚方法N()。如果是这样的话,岂不是那个赋值语句 fc=sc没起到什么作用吗?百度了半天还是想不通
?请前辈们指教




