虚方法,它的执行方式可以被派生类改变,这种改变是通过方法的重载来实现的;
using System;
class A
{
public void F(){ Console.WriteLine("A.F");}
public virtual void G(){ Console.WriteLine("A.G");}
}
class B:A
{
new 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和虚方法G. 类B则提供了一个新的非虚的方法F,从而覆盖了继承的F;
类B同时还重载了继承的方法G. 那么输出因该为:
A.F
B.F
B.G
B.G
提示:方法a.G()实际调用了B.G,而不是A.G. 这是因为编译时值为A,但运行时值为B,所以B完成了对方法的实际调用。
|