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关键字进行重写

 

posted @ 2017-10-05 00:26  LiuChangwei  阅读(247)  评论(0编辑  收藏  举报