查看: 388|回复: 0

[ASP.NET教程] 第5篇 抽象

发表于 2017-12-4 08:00:02

抽象类

描述一个事物,由于没有足够的信息,这时就将这个事物称为抽象事物。abstract为抽象关键字,被其声明的类称为抽象类,其声明的方法称为抽象方法。

抽象属性声明不提供属性访问器的实现,它只声明该类支持的属性,而访问器的实现留给派生类。

抽象方法声明不提供方法的实现,他必须是一个空方法,而将方法实现留给派生类。派生类必须重载抽象基类的抽象方法。

抽象类是用来作为基类的,不能直接实例化,即不能用抽象类去创建对象。抽象类的用途是提供多个派生类可共享的基类公共定义。抽象类特点:

  1. 抽象类用abstract声明,不能被实例化(不能new)。
  2. 只有当子类覆盖了所有的抽象方法后,子类才可以创建对象,如果没有覆盖所有抽象方法,那么子类还是一个抽象类。
  3. 抽象类也是不断向上抽取而来的,抽取了方法声明儿不确定具体的方法内容。由不同的子类完成具体的方法。
  4. 抽象类可以包含抽象的成员,如抽象属性和抽象方法,也可以包含非抽象的成员,甚至还可以包含虚方法。注意:没有抽象字段,字段是不可以抽象的。

几个关于抽象类的问题

1.抽象类中有构造函数吗?

有。抽象类的构造函数虽然不能给抽象类对象实例化,因为抽象类不能创建对象,但是抽象类有子类,抽象类的构造函数可以用于子类对象实例化。

2.抽象类一定是个父类吗?

是的。必须需要子类覆盖抽象方法才能实例化,使用这些方法。

3. 抽象类中可以不定义抽象方法吗?

可以的。

4. 抽象关键字abstract和哪些关键字不能共存?

sealed,private,static.一是因为抽象类不能是密封或者静态的。二是因为虚拟成员和抽象成员不能私有

抽象类与接口的区别

  1. C#支持单继承,不直接支持多继承(接口可以多继承)。它们的派生类只能继承一个抽象类,但是可以实现多个接口。即单继承,多实现。
  2. 抽象类中可以包含字段,构造函数,析构函数,静态成员或者常量等,但是接口中不可以。
  3. 抽象类中可以定义非抽象成员的实现,但是接口中不能定义任何实现。
  4. 抽象类中的成员可以私有的(只要是不抽象的),受保护的,内部的或者受保护的内部成员,但是接口中的成员必须是公共的。

备注:关于接口的内容请看“第6篇 接口”



回复

使用道具 举报

关闭

站长推荐上一条 /1 下一条