日期:2014-05-19  浏览次数:20780 次

关于abstract类的一个问题
今天学《c#入门经典》(.net2003)集合那章看到例子Ch11Ex01,有这样的疑问:
我们知道abstract类不能实例化只能继承;对于简单的数组,必须用固定的大小来初始化数组。
在Ch11Ex01中,定义了一个animal抽象类,其子类cow,chicken;在主类中又定义了
animal[]   animalArray=new   animal[2]。
现在就是这里我的思想出了问题。在这里数组要初始化,是不是数组的每个成员都是animal的一个实例?或者说,这里的数组的元素中的animal是什么样的,而animal类又不能实例化,这怎么理解?

------解决方案--------------------
animal[] animalArray=new animal[2],你要弄清除。
要初始化一个animal,是这样的:animal a = new animal();(当然这是错误的,因为animal是抽象的);
而上面这句话并不是初始化了animal的实例,而是初始化了一个Array的实例。所以这和animal是否抽象没有关系。
animal[] animalArray=new animal[2],当然要求所有数组元素都必须是animal实例,但是什么是“animal实例”?因为animal是抽象的,那么animal实例就只有是其子类的实例。