java中有抽象类和接口类的概念:

抽象类

包含抽象方法的类叫做抽象类。如果一个类包含一个或多个抽象方法,该类必须被限定为抽象的。如果从一个抽象类继承,并想创建该类的对象,那么必须为基类的所有抽象方法提供方法定义。如果不这样做(可以选择不做),那么导出类便也是抽象类,且编译器将会强制我们用abstract关键字来限定这个类。

抽象类和抽象方法非常有用,因为他们可以使类的抽象性明确起来,并告诉用户和编译器打算怎样来使用它们。抽象类还是很有用的重构工具,因为他们使得我们可以很容易地将公共方法沿着继承层次结构向上移动。我的理解是:我们可以让多个继承自抽象类的实例对象的指针(暂且这么形容吧)赋给抽象类类型指针。让抽象类类型指针统一调用这些实例对象的抽象方法,即完成接口编程。

接口类

将产生一个完全抽象的类,它根本没有提供任何具体的实现。它允许创建者确定方法名,参数列表和返回类型,但是没有任何返回体。接口只提供了形式,而未提供任何具体的实现。一个接口表示“所有实现了该特定接口的类看起来都像这样”。接口被用来建立类与类之间的协议。不同类实现时所共同遵守的协议,不在一个继承层次里的多个类都可以向上转型为接口类型对象。

接口不仅仅是一个极度抽象的类,他们它允许人们通过创建一个能够被向上转型为多种基本的类型,来实现某种类似多重继承的特性。我的理解是:我们可以让多个实现接口类的实例对象的指针(暂且这么形容吧)赋给接口类类型指针。让接口类类型指针统一调用这些实例对象的接口方法,即完成接口编程。

objective-c中有类别和协议的概念:

类别

利用objective-c的动态运行时分配机制,可以为现有的类添加新的方法。原理是先定义一个类别:

@interface 类类型   (类别名)

-(TYPE *) 方法名;

@end

然后在类类型的实现中实现类别方法。这样,我们就可以在已有类类型中添加一个类别,并且这个类类型可以选择性的实现这个类别的方法。利用类别可以分散实现,最重要的是委托技术使用了类别的概念。委托是一个对象,另一个类的对象会要求委托对象执行它的某个操作。通过创建一个NSObject的类别,任何类的对象都可以作为委托对象使用,因为cocoa中所有对象都是继承自NSObject的。这样的话,既不需要像C++那样从某个特定的委托类中继承,也不需要像java那样符合某个特定的接口类或抽象类。它只要把包含NSObject的类别定义的头文件import进来,实现类别方法,就可以实现委托方法了。换句话说:被发送给委托对象的方法可以声明一个NSObject的类别。objective-c正是通过类别的概念实现了非正式协议这样一种面向接口编程的设计。

协议

正式协议是一个命名的方法列表。和非正式协议不同的是,正式协议要求显式地采用协议。采用协议意味着你承若实现该协议的所有方法。这个概念和java中的接口类的概念极其想像,事实上,objective-c的协议正式受理java接口的启发。

协议定义:

@protocal 协议名

协议方法

@end

对象的协议实现:

@interface 类 <协议名>

......

实现协议的方法

@end

id类型表示一个可以指向任何类型对象的指针,它是一个泛型对象类型。如果一个用尖括号括起来的协议名称跟随一个id之后,则编译器将知道你期望任何类型的的对象,只要其遵守该协议。

- (void) setXXX: (id <协议名>) obj;

这样做,可以像java接口类那样,用泛型类类型指针执行某一个协议方法。即实现了面向接口编程。

C++中有动态绑定和虚函数的概念:

动态绑定:在c++中,通过基类的引用(或指针)调用虚函数时,发生动态绑定。引用(或指针)既可以指向基类对象也可以指向派生类对象。用引用(或指针)调用的虚函数在运行时确定,被调用的函数是引用(或指针)所指对象的实际类型所定义。

派生类一般会重定义所继承的虚函数,如果派生类没有重定义某个虚函数,则使用基类中定义的版本。一旦函数在基类中声明为虚函数,它就一直为虚函数,派生类无法改变该函数为虚函数这一事实。

c++的指针和引用的动态类型(动态绑定),是c++支持多态性的基石,也是面向接口编程的基石:我们大可以让引用(或指针)指向基类类型,让他动态绑定地执行派生类或基类的特定虚函数实现。

含有(或继承)一个或多个纯虚函数的类是抽象基类,除了作为抽象基类的派生类的对象的组成部分,不能创建抽象类的对象。这个概念多少像java中的抽象类。

面向接口编程简单比较相关推荐

  1. Java使用简单工厂模式对面向接口编程模式的深度解耦实现

    在Java和C#的编程世界里,并没有出现像C++那样的多脉继承,它们只支持单一的继承,或者多级继承,这一变化最大的影响,我觉得是大大的降低了编程的难度,因为没有了C++的多级多脉继承,所以接口出现了, ...

  2. java 用面向接口编程的方式开发打印机_Java面向接口编程之简单工厂模式示例

    本文实例讲述了Java面向接口编程之简单工厂模式.分享给大家供大家参考,具体如下: 一 代码 interface Output { // 接口里定义的成员变量只能是常量 int MAX_CACHE_L ...

  3. 面向接口编程详解(一)——思想基础

    我想,对于各位使用面向对象编程语言的程序员来说,"接口"这个名词一定不陌生,但是不知各位有没有这样的疑惑:接口有什么用途?它和抽象类有什么区别?能不能用抽象类代替接口呢?而且,作为 ...

  4. 面向接口编程详解(三)——模式研究

    通过前面两篇,我想各位朋友对"面向接口编程"的思想有了一定认识,并通过第二篇的例子,获得了一定的直观印象.但是,第二篇中的例子旨在展示面向接口编程的实现方法,比较简单,不能体现出面 ...

  5. python面向接口编程_Python 中的面向接口编程

    前言 "面向接口编程"写 Java 的朋友耳朵已经可以听出干茧了吧,当然这个思想在 Java 中非常重要,甚至几乎所有的编程语言都需要,毕竟程序具有良好的扩展性.维护性谁都不能拒绝 ...

  6. php面向接口编程思想,面向接口编程 - Laravel 实践

    面向接口编程是编码中的一种设计思想,这种方式基于接口而不是固定的类来构建应用程序. 如果您是一名程序员,那么您可能听说过则这样的说法,例如:面向接口编程.使用抽象类代替固定类等等. 这些都是说的同一件 ...

  7. 程序员过关斩将--你的面向接口编程一定对吗?

    菜菜哥,出大事啦 怎么了,你和男票分手了?很正常,谁让你男票是产经经理呢 不是啦,是我做的一个小游戏,需求又变了,程序我快改不动了 说来让我欢乐一下? 菜菜哥,咱两还能不能好好相处了 玩笑 玩笑,sh ...

  8. spring 面向接口编程_Spring面向方面的编程

    spring 面向接口编程 介绍 在理想的面向对象系统中,我们希望将每个对象设计为执行一项特定任务. 但是,除了执行其主要任务之外,对象还执行被动任务,例如日志记录,事务,安全性,缓存等.这些被动活动 ...

  9. java 开发详解_面向接口编程详解-Java篇

    相信看到这篇文字的人已经不需要了解什么是接口了,我就不再过多的做介绍了,直接步入正题,接口测试如何编写.那么在这一篇里,我们用一个例子,让各位对这个重要的编程思想有个直观的印象.为充分考虑到初学者,所 ...

最新文章

  1. python用什么开发平台_一般来说,python平台开发有什么作用?
  2. zookeeper 分布式锁原理
  3. 这是一位川大零基础转行 Python 的人生勇士
  4. Android:JAVA使用HDF5存储
  5. 纯CSS实现React Logo图形,内含详细解析
  6. java 圆形按钮,如何在Java中创建圆形的JButton?
  7. Git教程之局域网服务器搭建教程(Gitlab)
  8. 【深度学习】写诗机器人tensorflow实现
  9. 电脑计算机 系统制造方法是,如何制作车载计算机系统
  10. 监听imput框的内容变化
  11. 室内外一体化融合定位技术浅析--室内定位--新导智能
  12. eBPF 完全入门指南.pdf(万字长文)
  13. win7加快开机速度
  14. 诗词乱拼 zz from smth.org
  15. mysql update语句的用法详解
  16. springboot+网络空间安全实验教学中心门户网站 毕业设计-附源码191220
  17. 2018年的人工智能和深度学习将会如何发展?
  18. 计算机网络安全技术学习总结
  19. 移动App性能测试包含哪些内容?App性能测试工具有哪些?
  20. 台式计算机戴尔3020,戴尔 Dell OptiPlex 3020M 台式机整机 评测

热门文章

  1. Android下拉刷新
  2. Java se:网络编程
  3. 【Java SE】抽象类和接口
  4. ORM进阶之Hibernate中关系映射
  5. 打算翻译机器学习工具包--SHOGUN使用文档
  6. 面向流动人口管理的人脸验证系统设计及实现 论文+答辩PPT+项目工程文件
  7. c语言硬件控制程序,msp430的一些常用的C语言控制程序---ZLG7289
  8. 八皇后问题动态演示_Qt5实现
  9. JAVA----数字金额大写转换
  10. 【Moasure魔尺】 测量350平米椭圆形大泳池 4分钟