插件式框架作为一个高耦合低聚合的系统,它的功能定义与功能实现之间是分离的,这种策略是高耦合实现的保证。插件式框架好像一个功能聚集站,它对外界宣布,只要符合它发布的某种规范的组件(实现接口的类通常称为组件)都可以加入到这个平台中,而这些组件到底是做什么事情的,框架并不关心,当然,框架也提供了一些必要的信息和帮助保证这些组件能够正常实现它们的功能。
桥接模式是一种被认可的表示定义和与之关联的实现的方式,它和工厂(Factory)模式为所有的应用提供了基础。使用桥接模式开发的组件具有为了一个共同目标而多方协同工作除某些必须实现的接口外无需彼此交互的优点
在具有多个逻辑层的程序设计中,各层之间的通讯大多通过接口实现,由于接口不会轻易改变,如果一个层的代码发生变化,它不会影响其它层的功能;只要实现接口的组件功能正确,那么这个程序运行就更无问题。这种做法使得各层之间的影响降低到最低程度。
接口是是类型一般行为的定义和契约。例如交通工具都包含启动、停车、加速和减速等方法,但作为交通工具的具体类型,不同车辆之间的操作是不一样的。接口并不考虑它们各自采用什么方式实现这些功能,但是,它们都必须有这些基本的功能。接口只负责定义而不考虑实现,我们也不能产生一个接口的实例对象(Instance)。
实现了接口的类或结构都必须实现接口中定义的每一个方法,这些方法在设计上往往是相关的。
接口与抽象类非常相似,例如两者都不能产生实例对象,都可以作为一种契约和定义使用。但接口和抽象类仍有本质的不同,这些不同包括:
l         抽象类可以包含某些实现代码,但接口没有任何实现部分;
l         抽象类可以包含字段而接口没有;
l         接口可以被结构(Struct)继承,但抽象类不行;
l         抽象类可以有构造函数和析构函数,而接口都没有;
l         抽象类可以继承自其它类和接口而接口仅仅能继承自接口;
l         接口支持多继承而抽象类仅仅支持单根继承。
下面是抽象类和接口的对比例子:
#001 public abstract class AClass {
#002     abstract public void MethodA (int a);
#003     abstract public void MethodB (int a);
#004     abstract public void MethodC (int a);
#005     abstract public void MethodD (int a);
#006 }
#001 public interface IInterface {
#002     void MethodA (int a);
#003     void MethodB (int a);
#004     void MethodC (int a);
#005     void MethodD (int a);
#006 }
即使不从桥接模式的观点考虑,多种面向对象语言都引入了接口这种类型定义还有一个重要原因:一个类可以实现多个接口。在大部分面向对象语言中,多重继承都是被禁止的,这是因为当编译器需要找到虚方法的正确实现时,会出现不确定性。但是接口并没有实现的部分,实现多个接口,并非意味着类(Class)那样的继承,它也绝非是多重继承机制的替代品。
我们常常将接口与抽象类混淆,事实上,两者的表象过于一致。但接口用来定义两个对象通信的契约,抽象类用来封装对象间公用的行为;抽象类应主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。二者设计起初的目标完全不同,但在实际应用中被太多的人误解。这个原理在ArcObjects库中显露无遗:不同类型的组件互相调用是通过接口,而同一类型的对象群,如Color,则是通过抽象类组织在一起的,即接口是对外通讯的,抽象类是对内组织的。

转载于:https://www.cnblogs.com/zhangwei4573/archive/2009/12/28/1633924.html

接口的意义及于抽象类的区别(蒋波涛)相关推荐

  1. “接口”的定义及其与“抽象类”的区别

    我们知道一个有抽象方法的类是抽象类,而当一个类中全是抽象方法时,就可以定义为接口(interface) 接口命名通常以"I"开头: 接口中的方法默认有public abstract ...

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

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

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

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

  4. C#—接口和抽象类的区别?

    转载于 https://www.cnblogs.com/jian1125/p/10530125.html 一.接口 接口是指对协定进行定义的引用类型,其他类型实现接口,以保证它们支持某些操作.接口指定 ...

  5. java接口和抽象类的区别和作用

    java接口和抽象类的区别和作用 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过(implements)接口的方 ...

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

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

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

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

  8. [Java] 接口(Interface)与 抽象类 (Abstract)使用规则和区别

    版权声明:请尊重个人劳动成果,转载注明出处,谢谢! 目录(?)[+] 接口(Interface) 是抽象方法的集合,接口通常以interface来声明. 一个类通过继承接口的方式,从而来继承接口的抽象 ...

  9. java抽象和接口的理解_Java接口实现与抽象类的区别理解 | 彬菌

    版权声明:转载原创文章请以超链接形式请注明原文章出处,尊重作者,尊重原创! 恰饭广告 接口:接口是抽象方法的集合.接口通常以interface来声明. 接口注意事项: 1.严格来说,接口是用来实现(i ...

最新文章

  1. assa_高金赴美国ASSA年会招聘青年教授
  2. innodb一页为什么要存储两行记录_InnoDB中的页合并与分裂
  3. 介绍一下python有趣的库-tqdm
  4. mybatis自我总结
  5. 【资讯】K8S生态再添一员,Rancher发布开源HCI软件Harvester、及其安装教程
  6. 无法启动 MS DTC 事务管理器。LogInit 返回错误 0x2. 怎么办?
  7. v-model双向绑定原理_【Vue原理】VModel 白话版
  8. MYSQL的C 语言接口
  9. 95-140-122-源码-transform-算子reduce
  10. 开发环境入门 linux基础 (部分)while for 函数 计划任务
  11. WCF之旅读书笔记(2):WCF如何通过Binding进行通信
  12. string类型的数字字符串直接转换成int型方法
  13. 编译mcu media server
  14. CAD绘图教程之CAD中怎么进行消防计算?
  15. idea里面的注释模板
  16. 如何删除电脑计算机用户账户,怎么删除电脑账户密码 如何删除电脑开机账户密码...
  17. Bandizip下载安装教程
  18. 《月亮与六便士》的读后感作文3000字
  19. Android微信支付彻底扫坑
  20. 《高仿支付宝运动轨迹七日曲线图》

热门文章

  1. java 资料大全-转
  2. CVPR 2016 《Object Detection from Video Tubelets with Convolutional Neural Networks》论文笔记
  3. luogu P5468 [NOI2019]回家路线 (斜率优化、DP)
  4. php post 渲染数据,php 程序内部post数据实现方法
  5. window.open 不显示地址栏_谷歌浏览器Chrome显示「由贵单位管理」怎么解决?非阿里...
  6. 数据库oracle文件怎么打开,Oracle某个数据文件损坏,如何打开数据库-数据库专栏,ORACLE...
  7. 2021-03-07 Nussbaum函数
  8. onBlur()事件连续触发问题。
  9. POJ 1741 Tree(点分治)
  10. 实现BX的内容加上123 并把和送到寄存器AX