using System;
class A
{
public void F(){Console.WriteLine("A.F");}
public virtual void G(){Console.WriteLine("A.G");}
};
class B:A
{
public void F(){Console.WriteLine("B.F");}
public override void G(){Console.WriteLine("B.G");}
};
class Test
{
static void main()
{
B b = new B();
A a = b;
a.F();
b.F();
a.G();
b.G();
}
};
输出结果:
A.F
B.F
B.G
B.G
注意:a.G()实际调用了B.G()而不是A.G().这是因为编译时值为A,但是运行时值为B,所以B完成了对方法的实际调用.