本文主要从现实世界的接口出发,进行一个对接口含义的初步分析,并且对应到java中是怎样的含义的一个讨论。


生活中的接口

在生活中我们经常会听说这样那样的接口,比如经常使用电脑的人知道USB接口,显示器接口,还有手机上的耳机接口等。不单是计算机,还有电视机,空调等一些家用电器。遥控器便可类比于一个接口,它可以遥控电视机的具体行为。通过分析这些接口的共性,我们会得到一些有用的结论。

首先问你一个问题,一个接口对应几个对象?你可能毫不犹豫地回答:两个。但这个答案是错的。很显然看到接口我们会联想到它是一个事物联系另一个事物的中介(类似于两个岛之间的桥),可能你也会联想到其它事物,这里只讨论这种情况。由此说来接口通常包含两个对象,这样分析没错,但是请注意,我们刚才的分析只考虑了接口是某种中介,它可以将两个事物连起来,而忽略了接口的作用,即它存在的意义。

继续讨论遥控器。它存在的意义是什么?当然,它可以使我们更方便的挑选频道,即使是离电视机很远的地方(只要不超出信号范围)也能选择自己想要的功能。请注意功能这个词,遥控器上每一个按钮对应一个功能,按下它电视机会有相应动作。电视机负责实现某个功能,而遥控器仅仅把它声明出来化作一个按钮。遥控器的作用显而易见,它可以方便我们实现电视机的一些功能。但是一个遥控器可能不止遥控一个电视机,市面上有一种万能年遥控器,它可以遥控多种型号的电视机,它可能实现了某种规范和约束,这里不作细究。反过来思考,一台电视机也可能被两种遥控器操作,一种是原装的,一种是万能的。

因此我们可以说,接口不一定对应两个对象,只要符合某种协议,一个接口可以对应多个对象,一个对象也可以实现多个接口。


举一反三

分析到这里,一些更有趣的现象开始显现。

在生活中,我们会遇到很多事物,每个事物都有属于它的类别(在“类——改变世界”中有讨论),之前我们分析了类之间的联系。这种联系通常指一个类使用了另一个类的成员变量或方法。这是一种直接的单纯的联系,如果我们想用其它种类的联系呢?

我们可以先分析想要联系的两个类,为了形象的表达我的理解。举一个例子,动物类中的马和羊。马和羊是两个不同的类,虽然它们都是动物类(抽象类,以后会介绍)。有一天马和羊在一片草地上吃草,它们吃草的状态甚至很相像!这时突然一头狮子从远处袭来(它可能早有预谋),羊可能是第一个跑的,当然马也会跑,狮子吼叫着去追一只羊,自然界总是充满未知。

好了,先不管羊有没有被吃掉,我们分析刚才的情景。三个动物都是有联系的,这很显然。表面的联系即马和羊有共同的行为——吃草、逃跑,狮子也有跑动,它企图吃掉羊,这也是一种联系。那么它们是怎么联系到一起呢?如果细心的话会注意到本文的标题。答案已经出来了,通过拥有共同的行为。接着分析,马、羊和狮子都可以吃东西,奔跑,这可以说是它们的共同点,它们因为这些共同点而被定义为动物类(非绝对,可能还有其它共同点)。所以动物类又有一个新的含义,它描述一些具有共同特点(如吃、跑)的事物的集合。如果一个动物拥有这些特点,那么它可能属于动物类,如果一个事物是动物,那么它一定拥有这些特点。联系之前分析的接口,我们可以抽象的把动物类比作一个动物的接口,只要实现了这个接口的就一定是动物,并且拥有其特点(或者说接口的功能)

综上分析,接口是描述一些具有共同特性的事物的抽象类。它定义了这些共同特性,但是不具体实现它们。


程序中的接口

Java中接口具有无可比拟的特点和优势。简单说,接口是为了实现某些功能的类。凡是使用这个接口的类都可以使用这些功能,前提是它有实现功能的具体方法。

根据现实世界的描述,我们将很容易理解Java中的接口。它也是用来描述一些具有共同特性的类的抽象类,任何拥有这些共性的类都可以使用这个接口,当然,Java中也有一些类没有这些共性,但它依然可以使用这个接口(决定权在于程序开发者),它可以实现那些共性的方法,来完成相应的功能。

综合分析,Java中接口就是为程序员或用户提供了一个层次架构,接口处于架构的顶层,下层是具体的类,它们通过接口联系到一起,它们都具有一些共同特性,当然也有它们独立的特性。通过这个架构,我们可以清晰的看到各个类之间的关系,从而可以使我们更好地做出决策。

接口——从事物的共同点出发相关推荐

  1. 抽象类(Abstract)和接口的不同点、共同点(Interface)。

    同样点: (1) 都能够被继承 (2) 都不能被实例化 (3) 都能够包括方法声明 (4) 派生类必须实现未实现的方法 区 别: (1) 抽象基类能够定义字段.属性.方法实现.接口仅仅能定义属性.索引 ...

  2. @transactional 接口_Spring事物(@transactional注解)在什么情况下会失效,为什么?...

    一.@transactional 的使用 1.一般在service里加@Transactional注解,不建议在接口上添加 2.加了此注解后每个业务方法执行时,都会开启一个事务,不过都是按照相同的管理 ...

  3. Java学习笔记10(面向对象三:接口)

    接口: 暂时可以理解为是一种特殊的抽象类 接口是功能的集合,可以看作是一种数据类型,是比抽象类更抽象的"类" 接口只描述所应该具备的方法,并没有具体实现,具体实现由接口的实现类(相 ...

  4. java学习日记-接口

    回顾: abstract 修饰方法 抽象方法 没有方法体 必须定义在抽象类中 修饰类 抽象类 可以定义抽象方法 普通类中可以定义的一切,在抽象类中都可以定义 属性 构造方法 实例方法 不能实例化 子类 ...

  5. java接口和多态应用例题_Java基础进阶 第四天 抽象接口多态

    今日任务: 1,能够独立使用抽象类 2,能够独立使用多态 3,能够独立使用接口 4,能够理解适配器设计模式 1. 抽象类 1.1. 抽象类的产生 需求:创建类描述猫和狗的行为: 猫的行为:抓老鼠:吃鱼 ...

  6. jmeter异步请求测试怎么测试_JMeter接口测试之HTTP请求默认值

    不管是在UI级别的自动化测试还是在接口级别的自动化测试中,对公共数据数据的分离都是一种趋势,或者某种程度来说,这是自动化测试中必须要掌握的一种能力,是基本技能.这些公共数据就包含了测试地址,以及登录的 ...

  7. kotlin面向对象之接口、代理与委托、单例模式

    接口: 对于什么是接口这里就不概述了,跟java中的概念一样,下面直接上代码进行操练: 而男人跟女人的接口当然也是不同的,很显然男人跟女人最大的差别就是拥有"小弟弟"[我黄我暴利] ...

  8. 【Kotlin】Kotlin 抽象类与接口 ( 接口声明 | 接口实现 | 抽象类声明与实现 )

    文章目录 I . Kotlin 接口定义与实现 II . Kotlin 抽象类定义 III . Kotlin 类继承抽象类并实现接口 IV . Kotlin 接口与抽象类子类测试 I . Kotlin ...

  9. jmeter存储http请求返回参数_Jmeter接口测试之HTTP请求默认值(八)

    原标题:Jmeter接口测试之HTTP请求默认值(八) 不管是在UI级别的自动化测试还是在接口级别的自动化测试中,对公共数据数据的分离都是一种趋势,或者某种程度来说,这是自动化测试中必须要掌握的一种能 ...

最新文章

  1. Android Tabhost with FragmentActivity
  2. CENTOS7.2使用RDO方式安装OpenStack Mitaka笔记
  3. python远程监控服务器多个日志_python压测+paramiko远程监下载日志+js测试报告
  4. 剑指Offer_52_正则表达式匹配
  5. divcss布局模板代码_CSS3布局(前端所必须要掌握)
  6. 对!这就是你要的pandas练习题(❤️❤️)
  7. [HAOI2009]毛毛虫 dfs
  8. 在Blazor中构建数据库应用程序——第3部分——UI中的CRUD编辑和查看操作
  9. 【转】C#中的弱事件:不同的解决方法
  10. 俗话说“肩挑四两为客,帮人一日为奴”,这是什么意思?
  11. 【车牌识别】基于matlab GUI RGB颜色模型车牌识别【含Matlab源码 888期】
  12. Springboot实现销售团队管理系统
  13. JDK与JRE的区别
  14. 【安全】什么是0day漏洞?
  15. 那些高中时曾经背得烂熟的古文(滕王阁序,阿房宫赋, 兰亭集序 , 师说,蜀道难 ...)再一次读读吧,慢慢的读,突然很想哭...有些岁月果真不曾忘怀
  16. HTML吸引人眼球的网页,这8个神奇的HTML5文字特效让你的网页抓人眼球
  17. 北航2019计算机学院就业报告,北京航空航天大学2019届毕业生就业质量年度报告.pdf...
  18. java管理系统删除报错_Java版学籍管理系统
  19. VScode 无法保存,文件内容较新
  20. 年底大标季来袭,一步之遥2.0投标培训班助你实力升级!

热门文章

  1. 关于计算机优点缺点的英语作文,跪求一篇英语作文 题目:论计算机的优缺点...
  2. 更改项目project名称,与项目名称;
  3. 简单帅气的折纸机器人_新型电磁喷雾可将任何物体变成机器人,有望在生物学领域应用...
  4. css grid 自动高度_前端面试题:关于CSS布局
  5. Stm32:半主机模式
  6. 计算机考试老师批卷么,【揭秘】高考答卷扫描到电脑上是啥模样?阅卷老师喜欢啥样的答卷?...
  7. java .size,Java中length,length(),size()详解及区别
  8. js 中meta 移除head_浅析JS中数据结构
  9. 问答| 在四轮驱动机器人(SSMR)运动学模型中,左右虚拟轮的线速度vl和vr如何得到?
  10. android layout_margin的值,Android自定义ViewGroup( 支持layout_margin属性)