public abstract class A { public A() { Console.WriteLine('A'); } public virtual void Fun() { Console.WriteLine("A.Fun()"); } } public class B: A { public B() { Console.WriteLine('B'); } public new void Fun() { Console.WriteLine("B.Fun()"); }
}
}
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
A a = new B(); a.Fun(); }
输出的结果为什么是这样???
A
B
A.Fun()
}
}
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
A a = new B(); a.Fun(); }
输出的结果为什么是这样???
A
B
A.Fun()
注意这里是new,而不是override
A a = new B(); //声明了一个A引用
a.Fun();//调用A引用的Fun函数
运行时:
A a = new B(); //分配了一个B对象,并使用A引用指向这个对象
a.Fun(); //调用A的fun函数所以结果就是a.Fun
首先A建了个叫做a的引用,
然后又建了个B的实例让a来指向它。
在建B的实例时调用了B的基类的构造函数以及B的构造函数。
接着执行a.Fun();
由于a是属于类型A的,因此结果是A.Fun()。