前言:前面我们详细的讲解过C#中的接口和抽象类,那本篇文章我们来详细的看看他们到底区别在哪里?
直通车: C#接口(Interface)C#抽象类

目录:

  • 一、两者的区别
    • 相同点
    • 不同点
  • 二、两者的使用场景

一、两者的区别

相同点

  1. 两者都不能直接实例化
  2. 两者都包含未实现的方法声明
  3. 派生类必须实现未实现的方法,抽象类是抽象方法,接口是所有成员(不仅是方法还包括其他成员)

不同点

区别类型 接口 抽象类
定义 使用interface关键字定义 使用abstract关键字定义
成员 在接口中仅能定义成员,但不能有具体的实现 抽象类除了抽象成员以外,其他成员允许有具体的实现
成员变量 接口中定义的变量只能是公共的静态的常量(public static final) 抽象类中的变量是普通变量
声明 在接口中不能声明字段,并且不能声明任何私有成员,成员不能包含任何修饰符 在抽象类中能声明任意成员,并能使用任何修饰符来修饰
继承 接口能使用类或者结构体来继承,一个接口可以继承多个接口,但是接口不能继承类 抽象类仅能使用类继承,也就是说不能通过接口继承,在类继承接口的同时还可以继承其他类,一个类只能继承一个父类
实现 在使用类来实现接口时,必须隐式或显式地实现接口中的所有成员,否则需要将实现类定义为抽象类,并将接口中未实现的成员以抽象的方式实现 在使用类来继承抽象类时,必须将抽象类中所有抽象成员实现,如果没有将抽象成员全部实现,则必须将这个实现类定义为抽象类
实现方法 直接实现 使用override关键字实现抽象方法
抽象级别
使用场景 接口是适合为不相关的类提供通用功能 抽象类主要用于关系密切的对象

二、两者的使用场景

  1. 如果创建的功能将在大范围的全异对象间使用,则使用接口。如果要设计小而简练的功能块,则使用接口。
  2. 如果要设计大的功能单元,则使用抽象类。如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。
  3. 如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单的方法来控制组件版本。
  4. 抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。
  5. 接口定义应该是具有专一功能性的,而不是多功能的,否则造成接口污染。如果一个类只是实现了这个接口的中一个功能,而不得不去实现接口中的其他方法,就叫接口污染;

阅读完是否感觉现在对接口和抽象类区别的很清晰呢?快来评论区抢沙发!!!

C#中接口和抽象类的区别相关推荐

  1. Java中接口和抽象类的区别

    这里说的都是在java8新特性之前的特点.因为在jdk1.7之前,接口是不允许定义方法体的,当然还有一些其他的特性,我这里就不一一列出了.我这篇文章还是说一哈jdk1.7之前的接口和抽象类的区别和联系 ...

  2. java中抽象类和接口的相同点和不同点_Java中接口和抽象类的区别与相同之处

    1. 抽象类: (1).概念:抽象类是对一种事物的抽象,即对类抽..抽象类是对整个类整体进行抽象,包括属性.行为.Java抽象类和Java接口一样,都用来声明一个新的类型.并且作为一个类型的等级结构的 ...

  3. java中接口和抽象类的区别(保证你一看就懂)

    先单独说一点,让你可以在朋友面前装逼:接口也能被继承,只不过是被接口继承 对比: 1.都能包含抽象的方法,这些抽象的方法用于描述类具备的功能,不提供具体的实现(jdk1.8允许接口有一个default ...

  4. 精通Java 面试 07题 接口和抽象类的区别 (持续更新中)

    文章目录 一.接口和抽象类的区别(方式一) 二.接口和抽象类的区别(方式二) 总结 这里我写了两种回答方式,可以各取所需. 一.接口和抽象类的区别(方式一) 抽象类可以存在普通成员函数,而接口只能存在 ...

  5. java中的抽象类和接口可以实例化吗?,它们可以有构造方法吗?(扩展:接口和抽象类的区别)

    结论1:不可以实例化: 解释: 我们这里讨论的实例化是 抽象类类名 抽象类对象名 = new 抽象类类名(参数可能有可能无) 这种形式. 抽象方法不能有方法体!你说它们实例化了有啥意义. 结论2:接口 ...

  6. php中接口与抽象类,php中的接口与抽象类及接口与抽象类的区别

    [摘要] PHP即"超文本预处理器",是一种通用开源脚本语言.PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言.PHP独特的语法混合了C.Java.Perl以及 ...

  7. python接口和抽象类的区别_接口和抽象类有什么区别?

    最近团队在招人:阿里新零售事业群CBU技术部招Java高级&专家,团队主要负责B2B工业品牌业务,坐标杭州滨江,有兴趣的小伙伴私戳我. **************************** ...

  8. java 关注公众号没有调接口_高频面试题:接口和抽象类的区别

    作为一个基础的Java高频面试题,是所有Java面试者必须烂熟于心的.当然不能死记硬背,可以通过实际地写几个小demo,边实际操作边理解,既能感受到编程的快乐,更重要的是真的理解记住了二者的区别. 此 ...

  9. Java 中接口和抽象类竟然有 7 点不同?

    作者 | 磊哥 来源 | Java面试真题解析(ID:aimianshi666) 转载请联系授权(微信ID:GG_Stone) 本文已收录<Java常见面试题>系列:https://git ...

最新文章

  1. 分解得到的时频域特征_【推荐文章】基于变分模态分解和广义Warblet变换的齿轮故障诊断...
  2. Linux系统中ctrl+c、 ctrl+z、 ctrl+\ 产生的信号名称
  3. Java设计模式-工厂模式(1)简单工厂模式
  4. html文档定义层标记是,HTML文档定义层的标记是()
  5. android制作相册浏览器_电脑上用什么软件做电子相册
  6. html5页面结构案例,前端学习笔记(五)HTML+CSS静态页面实战案例:幸福西饼首页和百度首页...
  7. ug添加imachining变量_UG用的不够快?是不是还没建标准库
  8. 热图绘制一个快乐五一
  9. Python判断某一天是该年的第几天
  10. bert模型可以做文本主题识别吗_网民情绪识别TOP3分享----科技战疫·大数据公益挑战赛...
  11. 全新版本的Tidy Up 5 Mac最新版!重复文件查找和磁盘清理工具
  12. 利用 Google Chart API 生成二维码大小不一致
  13. 绿坝即将登场,好戏就要开演
  14. javaWeb连接数据库实现简单的登陆注册功能
  15. 怎么彻底删除users下的文件夹_c盘中的users文件夹删除了怎么办?
  16. matlab 线性拟合polyfit_Matlab 线性拟合 非线性拟合_matlab非线性拟合函数
  17. win远程桌面连接服务器,远程桌面连接windows服务器
  18. CSAPP datalab
  19. OLED显示图像和波形
  20. CentOS7.6系统安装步骤

热门文章

  1. Java课程设计—拿火柴小游戏
  2. 《高效休息法》书中的精髓:在繁重的工作及生活压力下,我们如何有效地休息,塑造不易疲劳的大脑?
  3. 全国空气质量网址解析
  4. 【数组】旋转数组(两种方法)
  5. 盛世昊通解析智能时代,关于未来出行的畅享
  6. 连接线下场景,小程序开启下一波流量红利?
  7. XYNUOJ 1246: Repair the Wall 贪心水题 酒馆浪人的博客
  8. 网站联盟CPS合作之一 入口链接
  9. 【qscoj】伊苏比的梦幻之旅之教练(直接+特殊+字符串)
  10. JQ删除元素方法设置以及Css的方法设置