C#中接口和抽象类的区别
前言:前面我们详细的讲解过C#中的接口和抽象类,那本篇文章我们来详细的看看他们到底区别在哪里?
直通车: C#接口(Interface)、C#抽象类
目录:
- 一、两者的区别
- 相同点
- 不同点
- 二、两者的使用场景
一、两者的区别
相同点
- 两者都不能直接实例化
- 两者都包含未实现的方法声明
- 派生类必须实现未实现的方法,抽象类是抽象方法,接口是所有成员(不仅是方法还包括其他成员)
不同点
区别类型 | 接口 | 抽象类 |
---|---|---|
定义 |
使用interface 关键字定义
|
使用abstract 关键字定义
|
成员 | 在接口中仅能定义成员,但不能有具体的实现 | 抽象类除了抽象成员以外,其他成员允许有具体的实现 |
成员变量 |
接口中定义的变量只能是公共的静态的常量(public static final )
|
抽象类中的变量是普通变量 |
声明 | 在接口中不能声明字段,并且不能声明任何私有成员,成员不能包含任何修饰符 | 在抽象类中能声明任意成员,并能使用任何修饰符来修饰 |
继承 | 接口能使用类或者结构体来继承,一个接口可以继承多个接口,但是接口不能继承类 | 抽象类仅能使用类继承,也就是说不能通过接口继承,在类继承接口的同时还可以继承其他类,一个类只能继承一个父类 |
实现 | 在使用类来实现接口时,必须隐式或显式地实现接口中的所有成员,否则需要将实现类定义为抽象类,并将接口中未实现的成员以抽象的方式实现 | 在使用类来继承抽象类时,必须将抽象类中所有抽象成员实现,如果没有将抽象成员全部实现,则必须将这个实现类定义为抽象类 |
实现方法 | 直接实现 |
使用override 关键字实现抽象方法
|
抽象级别 | 高 | 低 |
使用场景 | 接口是适合为不相关的类提供通用功能 | 抽象类主要用于关系密切的对象 |
二、两者的使用场景
- 如果创建的功能将在大范围的全异对象间使用,则使用接口。如果要设计小而简练的功能块,则使用接口。
- 如果要设计大的功能单元,则使用抽象类。如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。
- 如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单的方法来控制组件版本。
- 抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。
- 接口定义应该是具有专一功能性的,而不是多功能的,否则造成接口污染。如果一个类只是实现了这个接口的中一个功能,而不得不去实现接口中的其他方法,就叫接口污染;
阅读完是否感觉现在对接口和抽象类区别的很清晰呢?快来评论区抢沙发!!!
C#中接口和抽象类的区别相关推荐
- Java中接口和抽象类的区别
这里说的都是在java8新特性之前的特点.因为在jdk1.7之前,接口是不允许定义方法体的,当然还有一些其他的特性,我这里就不一一列出了.我这篇文章还是说一哈jdk1.7之前的接口和抽象类的区别和联系 ...
- java中抽象类和接口的相同点和不同点_Java中接口和抽象类的区别与相同之处
1. 抽象类: (1).概念:抽象类是对一种事物的抽象,即对类抽..抽象类是对整个类整体进行抽象,包括属性.行为.Java抽象类和Java接口一样,都用来声明一个新的类型.并且作为一个类型的等级结构的 ...
- java中接口和抽象类的区别(保证你一看就懂)
先单独说一点,让你可以在朋友面前装逼:接口也能被继承,只不过是被接口继承 对比: 1.都能包含抽象的方法,这些抽象的方法用于描述类具备的功能,不提供具体的实现(jdk1.8允许接口有一个default ...
- 精通Java 面试 07题 接口和抽象类的区别 (持续更新中)
文章目录 一.接口和抽象类的区别(方式一) 二.接口和抽象类的区别(方式二) 总结 这里我写了两种回答方式,可以各取所需. 一.接口和抽象类的区别(方式一) 抽象类可以存在普通成员函数,而接口只能存在 ...
- java中的抽象类和接口可以实例化吗?,它们可以有构造方法吗?(扩展:接口和抽象类的区别)
结论1:不可以实例化: 解释: 我们这里讨论的实例化是 抽象类类名 抽象类对象名 = new 抽象类类名(参数可能有可能无) 这种形式. 抽象方法不能有方法体!你说它们实例化了有啥意义. 结论2:接口 ...
- php中接口与抽象类,php中的接口与抽象类及接口与抽象类的区别
[摘要] PHP即"超文本预处理器",是一种通用开源脚本语言.PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言.PHP独特的语法混合了C.Java.Perl以及 ...
- python接口和抽象类的区别_接口和抽象类有什么区别?
最近团队在招人:阿里新零售事业群CBU技术部招Java高级&专家,团队主要负责B2B工业品牌业务,坐标杭州滨江,有兴趣的小伙伴私戳我. **************************** ...
- java 关注公众号没有调接口_高频面试题:接口和抽象类的区别
作为一个基础的Java高频面试题,是所有Java面试者必须烂熟于心的.当然不能死记硬背,可以通过实际地写几个小demo,边实际操作边理解,既能感受到编程的快乐,更重要的是真的理解记住了二者的区别. 此 ...
- Java 中接口和抽象类竟然有 7 点不同?
作者 | 磊哥 来源 | Java面试真题解析(ID:aimianshi666) 转载请联系授权(微信ID:GG_Stone) 本文已收录<Java常见面试题>系列:https://git ...
最新文章
- 分解得到的时频域特征_【推荐文章】基于变分模态分解和广义Warblet变换的齿轮故障诊断...
- Linux系统中ctrl+c、 ctrl+z、 ctrl+\ 产生的信号名称
- Java设计模式-工厂模式(1)简单工厂模式
- html文档定义层标记是,HTML文档定义层的标记是()
- android制作相册浏览器_电脑上用什么软件做电子相册
- html5页面结构案例,前端学习笔记(五)HTML+CSS静态页面实战案例:幸福西饼首页和百度首页...
- ug添加imachining变量_UG用的不够快?是不是还没建标准库
- 热图绘制一个快乐五一
- Python判断某一天是该年的第几天
- bert模型可以做文本主题识别吗_网民情绪识别TOP3分享----科技战疫·大数据公益挑战赛...
- 全新版本的Tidy Up 5 Mac最新版!重复文件查找和磁盘清理工具
- 利用 Google Chart API 生成二维码大小不一致
- 绿坝即将登场,好戏就要开演
- javaWeb连接数据库实现简单的登陆注册功能
- 怎么彻底删除users下的文件夹_c盘中的users文件夹删除了怎么办?
- matlab 线性拟合polyfit_Matlab 线性拟合 非线性拟合_matlab非线性拟合函数
- win远程桌面连接服务器,远程桌面连接windows服务器
- CSAPP datalab
- OLED显示图像和波形
- CentOS7.6系统安装步骤