public abstract class a 

   public abstract void factiona(); 

public class b:a 

   public override void factiona() 
   { 
      Console.WriteLine("This is b.factiona"); 
   } 
   public void factionb() 
   { 
     Console.WriteLine("This is b.factionb"); 
   } 

public class TestClass() 

   public static void Main() 
   { 
     a a1=new b(); 
     a1.factiona(); 
     a1.factionb(); 
     Console.WriteLine(a1.GetType()); 
    } 

我在运行此程序时,a1.factionb()不能调用,可是a1.GetType()返回为b 
既然是b类型,为何不能调用a1.factionb()? 

解决方案 »

  1.   

    a a1=new b(); 
    因为b类的实例已经被赋给了a类的一个引用,所以只能展现a类的接口。
      

  2.   

    虽然是b类的实例,但由于赋给了a类的一个引用,所以这时候只能调用a类的方法,而b类中有但a类中没有的方法这个时候是不能调用的。
      

  3.   

    a a1=new b(); 这句话,说a1是a类的实例,在a类中不存在factionb()方法。你要用,就得告诉编译器a1是b的实例
      

  4.   

    我也很不明白这断代码;
    a al=new b();
    到底在内存里面做了什么?还有想请教"引用(reference)"和"实例(instance)"的区别先谢谢各位大虾了!