public class A { public virtual void Fun1(int i) { Console.WriteLine(i); } public void Fun2(A a) { a.Fun1(1); Fun1(5); } } public class B : A { public override void Fun1(int i) { base.Fun1(i + 1); } } class Program { public static void Main() { B b = new B(); A a = new A(); a.Fun2(b); b.Fun2(a); Console.ReadKey(); } }
输出结果是
2
5
1
6
需要留意的是类A中的Fun2方法,在里面调用Fun1的时候,相当于是this.Fun1
所以在B类的实例对象,在调用的时候,Fun2是从A继承过来的,但是在Fun2方法里面调用Fun1的时候,调用的是其自身重写的方法Fun1
ps:如果把B中的override改为new的话,输出的结果:
1
5
1
5
时间: 2024-11-02 10:02:16