基类的引用调用派生类(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()方法: