抽象类和接口的区别:

  1.两者表达的概念不一样。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于“是”的关系;而接口是定义行为规范,因此对于实现接口的子类来说,相对于接口来说,是“行为需要按照接口来完成”。就像铁门木门都是门(抽象类),你想要个门我给不了(不能实例化),但我可以给你个具体的铁门或木门(多态);而且只能是门,你不能说它是窗(单继承);一个门可以有锁(接口)也可以有门铃(多实现)。 门(抽象类)定义了你是什么,接口(锁)规定了你能做什么(一个接口最好只能做一件事,你不能要求锁也能发出声音吧(接口污染))。

  2.抽象类在定义类型方法的时候,可以给出方法的实现部分,也可以不给出;而对于接口来说,其中所定义的方法都不能给出实现部分。

public abstract class AbsTest    //抽象类{public virtual void Test(){Console.WriteLine("Hello,World!");}public abstract void NewTest();}public interface ITest    //接口{void Test();void NewTest();}

  3.继承类对于两者所涉及方法的实现是不同的。继承类对于抽象类所定义的抽象方法,可以不用重写,也就是说,可以延用抽象类的方法;而对于接口类所定义的方法或者属性来说  在继承类中必须要给出相应的方法和属性实现。

4.在抽象类中,新增一个方法的话,继承类中可以不用作任何处理;而对于接口来说,则需要修改继承类,提供新定义的方法。

接口相对于抽象类的优势:

  1.接口不仅仅可以作用于引用类型,也可以作用于值类型。而抽象类来说,只能作用于引用类型。

  2..Net的类型继承只能是单继承的,也就是说一个类型只能继承一个类型,而可以继承多个接口。

  3.由于接口只是定义属性和方法,而与真正实现的类型没有太大的关系,因此接口可以被多个类型重用。相对于此,抽象类与继承类的关系更紧密些。

  4.通过接口,可以减少类型暴露的属性和方法,从而便于保护类型对象。当一个实现接口的类型,可能包含其他方法或者属性,但是方法返回的时候,可以返回接口对象,这样调用端,只能通过接口提供的方法或者属性,访问对象的相关元素,这样可以有效保护对象的其他元素。

  5.减少值类型的拆箱操作。对于Struct定义的值类型数据,当存放集合当中,每当取出来,都需要进行拆箱操作,这时采用Struct+Interface结合的方法,从而降低拆箱操作。相对于抽象类来说,接口有这么多好处,但是接口有一个致命的弱点,就是接口所定义的方法和属性只能相对于继承它的类型(除非在继承类中修改接口定义的函数标示),那么对于多层继承关系的时候,光用接口就很难实现。因为如果让每个类型都去继承接口而进行实现的话,首先不说编写代码比较繁琐,有时候执行的结果还是错误,尤其当子类型对象隐式转换成基类对象进行访问的时候。

接口和抽象类的对比:

转载于:https://www.cnblogs.com/Foregoer/archive/2013/03/02/2940584.html

OOP接口与抽象类的区别相关推荐

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

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

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

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

  3. Java接口学习(接口的使用、简单工厂、代理模式、接口和抽象类的区别)

    前言引入 官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 我的 ...

  4. 接口与抽象类的区别和联系

    接口 1.因为java不支持多重继承,所以有了接口,一个类只能继承一个父类,但是可以实现多个接口,同时接口本身也可以继承多个接口. 2.接口里面的成员变量默认是public static final类 ...

  5. 接口和抽象类的区别?

    接口和抽象类的区别? 我先来说说它们俩在语法上的区别吧,然后再来谈谈我的个人理解. 抽象类可以有具体的方法和属性,  接口只能有抽象方法和常量. 抽象类使用abstract修饰,接口使用interfa ...

  6. 【转载】接口和抽象类的区别 --相信你看完不会再混淆了

    原文地址:http://www.cnblogs.com/huihui-gohay/archive/2009/12/13/1623070.html 我想,对于各位使用面向对象编程语言的程序员来说,&qu ...

  7. 接口与抽象类的区别,为什么要用接口,抽象类不香吗?

    接口是一种比较特殊的抽象类(个人理解) 接口与抽象类的区别: 最直观来说: 接口: 接口中变量是常量,所以接口中不能有构造方法.因为构造方法最大的作用是给对象赋值或改值(个人理解)和创建对象.因为变量 ...

  8. java接口和抽象类的区别(经典面试题)

    java接口和抽象类的区别(经典面试题) 要了解接口和抽象类的区别,首先需要明白接口和抽象类的定义. 1.抽象类 包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可 ...

  9. 接口,类与接口的关系,接口与抽象类的区别

    接口 1 接口的概念 与之前学习过的抽象类一样,接口( Interface )在Java中也是一种抽象类型,接口中的内容是抽象形成的需要实现的功能,接口更像是一种规则和一套标准. 2 接口格式 3 接 ...

最新文章

  1. C#中DataGrid控件的基本使用
  2. 最新版Xshell 6安装教程详解
  3. c语言烟花百度云,C语言实现放烟花的程序
  4. python 多进程 调用模块内函数_python子进程模块subprocess详解与应用实例 之一
  5. ubuntu 开放端口_Masscan端口扫描工具使用小手册
  6. 鸿蒙系统联合,跨界联合 华为鸿蒙系统赋能厨电业
  7. centos7下安装mysql及测试centos_CentOS7安装mysql8
  8. c#值get、 set用法(包含自动转换的说明)
  9. php生成缩略图填充白,php生成缩略图填充白边(等比缩略图方案)_PHP教程
  10. 蓝桥杯 ADV-165算法提高 超级玛丽(动态规划、递推)
  11. Vue.js(学习Vue3之前必须要掌握的知识)
  12. “工业革命4.0”时代,智能汽车应是什么样?
  13. 数据分析岗位需求分析报告
  14. 游戏HTML翻翻乐,大班益智游戏翻翻乐优秀教案
  15. Ubuntu18.04安装OBS Studio
  16. 如果不从事编程,我可以做什么?
  17. 我的世界Scratch版
  18. 网页服务器修复,网页被劫持 网页被劫持后跳转发布网修复方法
  19. python 如何判断当天为周几?判断当天是否为工作日?
  20. 抽象类和接口都不能被实例化

热门文章

  1. c++监听键盘_想知道木马程序的键盘记录原理吗?python告诉你 !
  2. docker 安装mysql实战_使用docker搭建mysql实例教程
  3. python学习环境+开发环境的选择和配置
  4. 大学计算机一级计算机应用试题及答案,大学生计算机应用基础试题及答案
  5. m.2接口和nvme区别_原来M.2、SATA接口的固态盘有这样的差别,难怪大家都选“它”!...
  6. sql程序调用批处理_批处理学习之常用命令
  7. php和mysql web开发 笔记_PHP和MySQL Web开发读书笔记---创建Web数据库
  8. 围成一圈的排列组合问题_分班必考知识点!小学奥数之排列组合问题
  9. uml 继承_UML 完全解析和总结
  10. sqlserver 集群_云数据库最优成本方案,阿里云数据库新形态专属集群