using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { father _father = new son1(); _father.printclassname(); son _son = new son1(); _son.printclassname(); son0 _son0 = new son1(); _son0.printclassname(); } } public class father { public father() { } public void printclassname() { Console.WriteLine("father"); } } public class son : father { public son() { } public new virtual void printclassname() { Console.WriteLine("son"); } } public class son0 : son { public son0() { } public new virtual void printclassname() { Console.WriteLine("son0"); } } public class son1 : son0 { public son1() { } public override void printclassname() { Console.WriteLine("son1"); } } }
运行结果:
1.override修饰符指的是覆盖,实现动态调用,整个基础体系中必须要有一个virtual,一般为最顶层的父类用virtual,子类全部用override修饰,(但是不一定是最顶层用virtual,有可能是中间某一成开始用virtual,这时候的virtual需要和new修饰符一起使用,表示隐藏基类(把“非虚”功能也隐藏了,变成了“虚”),从此该函数开始变为虚函数了)以实现函数的重载,实现自己特定的功能。
2.new表示隐藏基类,这一点和C++中普通重载(非多态)是一样的。