C#中关于抽象类的问题。
publicabstractclassAnimal{};定义抽象类Animal[]animalArray=newAnimal[2];抽象类不能实例化,为何这里可以初始化a...
public abstract class Animal{};定义抽象类
Animal[] animalArray = new Animal[2];
抽象类不能实例化,为何这里可以初始化animalArray ? 展开
Animal[] animalArray = new Animal[2];
抽象类不能实例化,为何这里可以初始化animalArray ? 展开
展开全部
投象类是不可以实例化的。这里所谓类实例化指的就是类在生成过程中调用了类的构造函数,则称该类为实例化。而抽象类没有构造函数,所以是无法实例化的。
在C#编译器环境下,具体类即使不写构造函数,编译系统也会自动增加默认的实例函数,以便实例化,但是对于声明为abstract的类,术语称“抽象类”或“泛类” ,系统不会默认为其生成构造函数,而且编译系统在编译时,遇过声明为abstract类时,如有构造函数则会抛出错误!
Animal[] animalarray;
Aninal[] animalarray = new Animal[2];
这种情况下均没有调用Animal的构造函数,因而不是对抽象类的实例化,而是对数组的实例化。
Animal animal;
这句也只是声明了一个变量,也不没有对抽象类进行实例化,因而也是正确的。
Animal animal = new Animal();
这是试图对一个抽象类实例化,因Animal抽象类没有构造函数,会造成实例化的失败!所以这是不允许的!
Animal animal = new Cat();
Cat是一个Animal的子类(派生类),因有相应的构造函数的话,是允许的。允许父类(基类)指示子类(派生类)这种调用规则其实就是我们常说的里氏原则。它并没有对抽象类进行任何的实例化的。
在C#编译器环境下,具体类即使不写构造函数,编译系统也会自动增加默认的实例函数,以便实例化,但是对于声明为abstract的类,术语称“抽象类”或“泛类” ,系统不会默认为其生成构造函数,而且编译系统在编译时,遇过声明为abstract类时,如有构造函数则会抛出错误!
Animal[] animalarray;
Aninal[] animalarray = new Animal[2];
这种情况下均没有调用Animal的构造函数,因而不是对抽象类的实例化,而是对数组的实例化。
Animal animal;
这句也只是声明了一个变量,也不没有对抽象类进行实例化,因而也是正确的。
Animal animal = new Animal();
这是试图对一个抽象类实例化,因Animal抽象类没有构造函数,会造成实例化的失败!所以这是不允许的!
Animal animal = new Cat();
Cat是一个Animal的子类(派生类),因有相应的构造函数的话,是允许的。允许父类(基类)指示子类(派生类)这种调用规则其实就是我们常说的里氏原则。它并没有对抽象类进行任何的实例化的。
展开全部
抽象类不能实例化的,假如抽象类要实例化需要这么写,但是是错误的:Anmial animal = new Animal();这才是抽象类实例化,这个是错误的,不能编译通过的,
而你上面写的这个是一种类型了,相当于int ,string char long 之类的了
Animal[] animalArray = new Animal[2]一个数组,类型是Animal型,长度是2的数组,这个是对的,
而你上面写的这个是一种类型了,相当于int ,string char long 之类的了
Animal[] animalArray = new Animal[2]一个数组,类型是Animal型,长度是2的数组,这个是对的,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
抽象类不是不能实例化,而是不能单独实例化,当被继承之后能从子类的构造函数中实例化。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
要用接口interface继承抽象类,然后再实例化这个接口
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你初始化的是一个Animal数组,而不是Animal本身,如果这么写就不行了
animalArray[0] = new Animal();
animalArray[0] = new Animal();
追问
也就是说不是具体的数组对象?
追答
必须得知道数组虽然写成Animal[],但它并不是Animal的实例,而数组里的每一项,才是Animal实例
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询