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()");
        }
}我想问的问题是
  A a = new B();
 A  a=new A();
具体区别是什么

解决方案 »

  1.   

    A a 这是申明语句
    a = new B(); 这是赋值
    说明a 指向B类型对象
    a = new A(); 这是赋值,a 指向A类型对象
    ,所以2次的对象是不一样的,所以2次a能掉的方法也不一样的,如果用接口做A 的话可以抽象 参数,
      

  2.   

    参见9楼解答...
    http://topic.csdn.net/u/20091121/22/5acbe625-350a-44f6-97a2-0b3ec7a2ba72.html
      

  3.   

    A   a   =   new   B();   
    首先构造的是B的父类的构造体,然后才是B的构造体
    http://topic.csdn.net/u/20070616/19/e7c41165-9f88-4d12-a268-867e6f70984e.html
      

  4.   

      //声明一个父类对象,然后用子类构造,
     //子类是一种特殊的父类,所以这个是可以的。
    A a = new B(); 
    //下面这个恐怕不行吧?抽象类还能这么写么?
    A  a=new A();
      

  5.   

    首先abstract,interface只能声明,不能独自实现吧,其次A a = new B();用A的变量a引用了B的对象,B又是A的子类,如果子类重写了父类的方法,那么将体现出多态的意思
    C#中抽象类,抽象方法,虚方法,方法重载拿来实现多态
      

  6.   

    对象实际上不一样滴,去了解下多态,就知道区别了比如: 
      A a = new B(); //可以调用子类,也可以跳用父类,如果在对个继承的情况下,可以实现动态调用(多态)
    A  a=new A(); //仅仅就是一个类的实例化
      

  7.   

    A a = new B(); 
    说明类型是A, 但是按照B的特征来开辟托管堆内存空间。A a=new A(); 
    语法错误。抽象类不能被实例化。
      

  8.   

    晕,A  a=new A();
    A是抽象类,根本不能被实例化.这是错误的代码.在vs中根本无法编译.
      

  9.   

    你确定B中的Fun前面是new 而不是override?