基类的引用调用派生类(derived class)中的方法时,要满足如下条件:
1.基类方法要用virtual标注
2.派生类方法要用override标注
class MyBaseClass { virtual public void Print()//基类方法用virtual { Console.WriteLine("This is base class"); } } class MyDerivedClass:MyBaseClass { override public void Print()//派生类用override { Console.WriteLine("This is derived class."); } } class MySecondClass:MyDerivedClass { override public void Print()//派生类用override { Console.WriteLine("This is second class"); } } class Program{ static void Main(string[] args){ MyDerivedClass derived = new MyDerivedClass(); MyBaseClass mybc = (MyBaseClass)derived;//强制类型转换 derived.Print(); mybc.Print(); } }运行效果:
若改为:
class Program{ static void Main(String []argc){ MySecondClass derived = new MySecondClass(); MyBaseClass mybc = (MyBaseClass)derived; derived.Print(); mybc.Print(); Console.ReadKey(); } }运行效果:
结论是:
基类实例mybc调用Print()方法时,调用层次会沿着继承层次向上传递,会调用最高派生类中的方法。
第一个Main()方法:
第二个Main()方法:
