12. 抽象与密封
一、抽象类与抽象方法
1、抽象类与抽象方法声明:
抽象类:在面向对象的概念中,所有的类都是通过对象来描述,但并不是所有的类都用来描述对象。如果一个类中没有足够的信息来描绘一个具体的对象,这样的类就是抽象类。
声明:他们都必须包含关键字 abstract ,并且抽象方法不能有方法体。抽象类中可以包含非抽象方法。
2、抽象类特性:
(1)抽象类不能实例化,必须通过继承由派生类来实现其抽象方法。如果派生类没有实现所有的抽象方法,则该派生类也必须声明为抽象类。
(2)抽象类的非抽象子类(即派生类)必须通过重载实现其继承的所有抽象方法和抽象服务器 。
3、抽象方法
(1)抽象非是隐式的虚方法,只允许声明在抽象类中,不能使用static、private或virtual修饰符;
(2)重写抽象方法时采用override 。
4、抽象方法和虚方法的区别:
虚方法有实现部分,并且派生类对其重写是可选的;抽象方法没有实现部分,并且强制非抽象派生类对其重写。
5、abstract修饰符
(1)他可以和类、方法、属性、索引器及事件一起使用;
(2)在类声明中使用 abstract 修饰符以表明这个类只能是其他类的基类;
(3)他不能修饰静态方法或静态属性 。
二、密封类与密封方法
1、密封类
(1)密封类即不能继承的类,C#中使用关键字 sealed,将类和方法声明为密封类或者密封方法;
(2)密封类中不能包含虚方法(virtual)和抽象方法(abstract)。
2、密封方法
(1)用修饰符 sealed 进行标记的方法;
(2)使用 sealed 修饰符可以防止派生类进一步重写该方法 。
三、虚方法
(1)子类可以对父类中的虚方法进行重写;
(2)定义:
如: public virtual void eat(); //使用virtual关键字定义
public override void eat(); //使用override关键字进行重写