类与接口的区别和详解
在C#中类和接口是非常重要的知识点。这里主要介绍这两种的类型。
1. 类
类的分类有:抽象类(abstract)、密封类(sealed)、静态类(static)
1.1 抽象类
关键字: abstract使用目的:若所有子类拥有共同的特性,可以把这个特性放到一个抽象类中,子类继承此抽象类。 特点: 1.不能被实例化;ClassName en=new ClassName();//这样会报错。 2.抽象成员必须包含在抽象类中。 3.抽象类除了抽象成员外,还可以包含别的成员(不用关键字 abstract)。 4.子类继承抽象父类后,必须把父类中的所有抽象成员都重写(非抽象成员不必重写)。除非子类也是个抽象类。 5.抽象成员的访问修饰符不能是private。 6.抽象类是有构造函数,虽然不能被实例化。 7.abstract不能用于字段成员,可定义成属性。 8.abstract用于方法时,方法不能定义主体(内容)。 9.抽象类也可以实现接口,但要把接口的成员前面标记个abstract。
代码示例:
![](/assets/blank.gif)
static void Main(string[] args) {Person person = new Person(); person.ShowHello(); Console.ReadKey(); } //抽象类 public abstract class Humen { public Humen() { Console.WriteLine("Abstract Class .ctor"); } public abstract void ShowHello(); } public class Person : Humen { public override void ShowHello() { Console.WriteLine("Hello"); } }
![](/assets/blank.gif)
实现结果:
1.2 密封类
关键字: sealed使用目的:不需要子类来继承他。如 String;特点: 1.不能被继承,如:string ,不能被继承。 2.子类重写后,前面加个sealed,那么子类就不能再被继承。
1.3 静态类
关键字: static使用目的:不需要实例化,可以直接类名引用静态方法。比如 工具类。特点: 1.相似于sealed与abstract使用。 2.静态成员在整个程序退出时才释放资源,所以尽量别写静态字段、属性。最好是静态方法。
2. 接口
关键字: interface使用目的:抽象类所拥有的共性,也可以概括为:为了多态。特点: 1.接口中只能包含方法。(方法、属性、索引器、事件) 2.接口中的方法不能有任何实现 3.接口中的成员不能有任何访问修饰符(哪怕是public) 4.接口不能被实例化 5.实现接口的类,必须实现接口的所有成员(这里跟抽象类一样) 6.类不能多继承,所以在某些情况下,只能用接口来代替。接口可以多实现(一个类可以继承多个接口,而只能继承一个类) 7.接口的主要目的就是为了实现多态 8.当一个类,同时继承了某个类,并且也实现了某些接口的时候,必须要将继承的类写在第一个(如果一个类同时继承了父类和接口的时候,要把父类写在最前面) 9.当多个类,都具有某个或某几个功能时(方法),但是这几个类型又不属于相同的系列(这几个类型没有共同的父类,就不能用抽象类。),所以这时,为了实现多态就可以考虑把这几个类型共有的方法提取到一个接口中,让这几个类型分别实现该接口 10.当父类实现接口,子类继承父类。那么 接口就可以引用子类 11.不要在一个接口中写过多的方法,避免造成接口污染。可编写多个接口,在每个接口中,分别定义方法 12.实现接口方法的时候,不要有override关键字,直接跟平常定义一样 13.接口方法的显示实现,如果多个接口里有相同的方法名。那么第一个方法名默认的引用的是排在最前面的接口,如果要使用后面接口的方法,就要显示实现:接口名.方法名。访问修饰符是private
什么时候把方法放到父类中 还是接口里:
当一个父类派生出5个子类时,所有子类中只有3个需要一个功能,也就是说不是所有的子类都需要此功能,那么就可以把次功能放到一个接口里,各子类进行单独的实现。接口为了更好的约束子类。
转载于:https://www.cnblogs.com/shanwater/p/5636562.html
类与接口的区别和详解相关推荐
- python时间函数报错_python3中datetime库,time库以及pandas中的时间函数区别与详解...
1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Servic ...
- python获取系统时间函数_python3中datetime库,time库以及pandas中的时间函数区别与详解...
1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Servic ...
- Java堆和栈的区别/联系详解
Java堆和栈的区别/联系详解 关于Java中堆栈内存的知识,算是基础知识,和C语言中的指针有一些类似,面试中也经常会被问到,特别是跟Java和C都有关的开发工作. 一.堆栈的联系 在Java中,内存 ...
- @RequestMapping 和 @GetMapping 、@PostMapping 的区别(详解)
HTTP请求方法 HTTP请求方法一共有9种,为 GET.POST.HEAD.OPTIONS.PUT.PATCH.DELETE.TRACE.CONNECT. GET [获取资源]本质就是发送一个请求来 ...
- python类装饰器详解-Python类中的装饰器在当前类中的声明与调用详解
我的Python环境:3.7 在Python类里声明一个装饰器,并在这个类里调用这个装饰器. 代码如下: class Test(): xx = False def __init__(self): pa ...
- STM32接口FSMC/FMC难点详解
STM32接口FSMC/FMC难点详解 转载 http://blog.sina.com.cn/s/blog_808bca130102x94k.html STM32F767的FMC将外部存储器划分为 ...
- IEnumeratorTItem和IEnumerator Java 抽象类和普通类、接口的区别——看完你就顿悟了...
IEnumerable 其原型至少可以说有15年历史,或者更长,它是通过 IEnumerator 来定义的,而后者中使用装箱的 object 方式来定义,也就是弱类型的.弱类型不但会有性能问题,最主要 ...
- 超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享...
超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享 DI框架 Google-Guice入门介绍 转载于:https://www.cnblogs.com ...
- php支付宝接口参数错误,php支付接口_php支付宝支付接口程序及参数详解
摘要 腾兴网为您分享:php支付宝支付接口程序及参数详解,作业盒子,智能互联,智联招聘,小番茄等软件知识,以及雷电游戏中心,天气预报软件,live电视直播,otcbtc,手机街机,lq-630k驱动 ...
最新文章
- SpringBoot服务上线流程
- 【Paper】2020_Qize_Design of UGV Trajectory Tracking Controller in UGV-UAV Cooperation
- ARMV8-aarch64的寄存器介绍(二)
- OpenCV:OpenCV目标检测Hog+SWindow源代码分析
- 如何应对云原生之旅中的安全挑战?
- CentOS 6.6系统安装
- 【hdu 4859】海岸线(图论--网络流最小割)
- DataFrame的行列操作
- 计算机毕业设计源码—Springboot驾校考试网站系统
- 儿童python编程教程-儿童编程python入门
- 服务器 运行时错误怎么办,内部服务器错误怎么办
- 反思腾讯:大数据与AI时代的危与机
- (生活篇)对恋爱谈心大事件的思考与反思——于五周年纪念日20211225
- 用卷积神经网络(CNN)识别文字
- AltiumDesigner 18 菜单中英文对照表
- Unity游戏开发客户端面经——数学(初级)
- 2021软科计算机科学与技术,2021软科排名,NTU 十学科跻身世界前十!
- 云计算公司城市云申请新三板挂牌上市
- NMQ消息队列—中间件
- linux可视化编程,Kylix带你走进Linux可视化编程世界