12. 抽象与密封

Posted LiuChangwei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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关键字进行重写

 

以上是关于12. 抽象与密封的主要内容,如果未能解决你的问题,请参考以下文章

C# 中基类,虚类,抽象类,密封类,接口的区别

jqc#零基础学习之路抽象类和密封

kotlin抽象类密封类接口

在密封类中为抽象 val 赋值

抽象类上的 Json.reads(不支持密封特征:没有已知的子类)

[Unity] C#中级编程 - 06 - 隐藏/虚拟/抽象/覆写/密封