抽象类为什么可以实例化呢?真是怪怪的?
一直认为抽象类是无法实例化的,但是代码就在下面,确实可以实例化,真是晕了using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace d101008
{
    class Program
    {
        public abstract class Class1
        {
            string name;            public Class1() { name = "No Name"; }
            public Class1(string name)
            {
                Console.WriteLine("class1 中");
                this.name = name;
            }            public string Name
            {
                get
                {
                    return name;
                }
            }
        }        class Class2 : Class1
        {
            public Class2(string n) : base(n)
            {
                Console.WriteLine("class2 中");
            }        }        static void Main(string[] args)
        {
            //Class1 是抽象类呀,为何可以实例化呢?
            Class1[] obj = new Class1[2];
            obj[0] = new Class2("aaaa");
            obj[1] = new Class2("bbbb");
            foreach (Class1 tmp in obj)
            {
                Console.WriteLine(tmp.Name);
            }
            Console.ReadLine();
        }
    }
}

解决方案 »

  1.   

    Class1没有实例化,new了两个class2
    Class1[] obj = new Class1[2]; 是实例化了一个数组
      

  2.   

     Class1[] obj = new Class1[2];
    这一句如何理解呢?
    是实例化 class2可是左边是class1呀,如何理解呢?我有点晕了
      

  3.   

    Class1[] obj = new Class1[2];这里明明是 new Class1 呀,为何不是实例化呢?
      

  4.   


    谢谢,这确实是实例化一个 Class1 数组,但是数组元素明明就是 Class1 呀。
      

  5.   


    数组元素是Class1没错,但是哪里有实例化 Class1了?
    实例化了一个Class1 数组,里面的元素都是null啊
      

  6.   

    声明了一个Class1类型的数组,实例化了两个Class2,并使Class1数组的元素指向这两个Class2对象,仅此而已
      

  7.   

    Abstract class 肯定是不能够实例化的
      

  8.   

    Class1是抽象类,不可以实例化,但是Class1类型的变量是可以存在的呀
    而且基类类型的变量,可以指向派生类的变量的
    这个是多态性的最基本实现方式
    Class1 obj1 = new Class2();
    这样写也是一样的
      

  9.   


    Class1[] obj = new Class1[2];
    1.定义一个大小为2且类型为Class1的数组,每个数组元素为NULLobj[0] = new Class2("aaaa");
    obj[1] = new Class2("bbbb");2.分别为数组初始化为Class2定义数组时只是在分配内存而非实例化抽象类Class1
      

  10.   

    Class1[] obj = new Class1[2];只不过是申明了一个容器这个容器是用来装载Class1的,
    并没有实例化Class1。
      

  11.   

    这里的class1[],class1仅仅是作为类型而已,
    如果代码编程这样
    int[] ii = new int[2];
    楼主就明白了吧,这里的int和class1是一样的,你总不能说int就是具体的1 2 3 4吧,他仅仅是类型而已。