先看一下如下代码,实现的是两个方法,MethA和MethB,基类中两个方法为虚方法;子类Class1中,重写了方法MethA,重载了方法MethB;而Class2中,则重写了方法MethB:
View Code
1 public abstract class BaseClass 2 { 3 public virtual void MethA() 4 { 5 Console.WriteLine("BaseClass.MethA"); 6 } 7 8 public virtual void MethB() 9 { 10 Console.WriteLine("BaseClass.MethB"); 11 } 12 } 13 14 15 public class Class1 : BaseClass 16 { 17 public void MethA() 18 { 19 Console.WriteLine("Class1.MethA"); 20 } 21 22 public override void MethB() 23 { 24 Console.WriteLine("Class1.MethB"); 25 } 26 27 } 28 29 public class Class2 : Class1 30 { 31 public new void MethB() 32 { 33 Console.WriteLine("Class2.MethB"); 34 } 35 36 }
看一下,如下代码的输出是什么?
View Code
1 static void Main(string[] args) 2 { 3 Class2 class2 = new Class2(); 4 class2.MethA(); 5 class2.MethB(); 6 Console.ReadLine(); 7 }
是的,输出如下所示:
说明:
对于class2.MethA()的输出,因Class2继承于Class1,而Class1重写了MethA方法,所以,class2.MethA()是使用Class1中的MethA方法,输出Class1.MethA。
对于class2.MethB()的输出,因Class2重写了MethB方法,覆盖了父类中的MethB,所以,class2.MethB()是使用Class2中的MethB方法,输出Class2.MethB。