[.NET(C#)]写出程序的输出结果,大侠们帮帮忙啊

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()" );
}
public static void Main()
{
A a = new B();

a.Fun();
}
}

答案:
A
B
A.Fun()

我想知道答案的具体过程是怎样的?
为什么会先输出A后输出B 最后输出A.Fun()

在类实例化时,程序会自动执行类的默认构造函数,因为B继承A,所以先执行类A的默认构造函数,然后是B。用父类实例化子类(A a=new B()),对于(a.Fun)来说,是调用的父类中的Fun函数,如果用(B a=new B()),a.Fun就会调用类B中的Fun函数,输出结果会是B.Fun。希望对你有帮助。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-10-19
构造B的实例时调用构造函数,先调 用基类A的构造函数,所以会先输出A
其次再输出B
尽管实例是B的实例 ,但他赋值给A类型后,通过基类A调用,调用的当然是A的方法,如果不是new 而是overrides的话,就会是B.Fun()!
相似回答