https://mp.weixin.qq.com/s/tEVw0j18rX2hxt-guXQJ-w

大道至简,本质往往是很朴素的。

本质:

类是主体,接口是主体之间交流沟通的规约。

位置:
1. 主体站两旁,连接接口的管道在两者之间;
2. 接口位于主体侧面;
3. 父类在主体类的头顶上,父类是对子类高一个概念层次的抽象(概念宽泛化);

接口与主体的关系:

1. 两个沟通的主体,一个使用接口,一个实现接口;
2. 接口是动作的集合,实现接口,表明主体有能力执行接口约定的动作;
3. 使用接口的主体不需要实现接口,但需要知道接口:
  a. 不知道约定的常量,则两方所指会有所混淆;
  b. 不知道方法签名会被拒绝服务;
  c. 不知道方法调用顺序,会被拒绝服务;
  d. 使用接口的第一步可以是认证,不具备相应信息则会被拒绝;
4. 接口是主体的组成部分:
  a. 接口是实现接口的主体的能力;
  b. 接口是使用接口的主体的知识,或者说使用接口也是一种能力;
5. 主体可以具有多种能力,进行多种沟通,所以可以实现多个接口;

规约:
基本的:
1. 常量用以约定两方所指是同一个东西;
2. 方法签名以约定如果要对方做什么,需要提供什么;
组合的:
3. 如果沟通需要多个步骤,则需要约定调用方法的顺序;
这种规约Java接口无法实现,需要使用文档来说明和规范;

举例:
1. 主体同学甲和主体同学乙;
2. 主体乙有冰淇淋、冰棍儿,具有卖冰淇淋、冰棍儿的能力;
3. 主体乙把冰淇淋标记为第一种商品,冰棍儿标记为第二种商品;
4. 主体甲有钱;
5. 主体甲知道主体乙卖东西;
6. 主体甲知道第一种商品是冰淇淋;
7. 主体甲把钱给主体乙,并告诉他要买第一种商品;
8. 主体乙确认钱足够,并把第一种商品交付给主体甲;
9. 主体甲拿到冰淇淋;

Java描述:
1. ManJia, ManYi;

2.

interface Seller {
int PRODUCT_BQL = 0;
int PRODUCT_XG = 1;
Product sell(Money money, int productNumber);
}
class ManYi implements Seller {
Product sell(Money money, int productNumber) {
if (isMoneyNotEnough(money)) {
return null;
} if (productNumber == PRODUCT_BQL) {
return findBQL();
}
}
}

4.

class ManJia {
Money money = Dad.give(100);
ManYi seller = Find.found(); public void buy() {
Product bql = seller.sell(money, Seller.PRODUCT_BQL);
}
}

父类和接口:
1. 父类和接口是不同的概念,概念不同、位置不同;
2. 子类做为一个整体进行抽象,提升一个概念层次(泛化),成为父类;
接口是对子类部分能力的抽象;
3. 父类的概念比子类宽泛,子类在概念上无法脱离父类的范畴:白马始终是马;
接口是实现主体的一种能力,从这种能力的角度看,主体才是接口要表达的概念:
主体乙在卖东西的时候才是Seller;

为什么优先使用接口,而非抽象父类:
1. 优先从某种角度去界定,而非从整体上界定,留有余地,方便扩展;

Java-接口的本质的更多相关文章

  1. python面向对象进阶 反射 单例模式 以及python实现类似java接口功能

    本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 类的成员 类的成员可以分为三大类:字段.方法和特性. 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存 ...

  2. OpenCV4Android开发之旅(一)----OpenCV2.4简介及 app通过Java接口调用OpenCV的示例

    转自:  http://blog.csdn.net/yanzi1225627/article/details/16917961 开发环境:windows+ADT Bundle+CDT+OpenCV-2 ...

  3. 关于Java接口

    1 接口的本质 (1)一组有规则的集合: (2)一定视角上的同类事物的抽象:同类事物的概念是相对的 2 接口与抽象类的区别 (1)java不支持类的多继承,但可以实现多个接口: (2)使用动机:抽象类 ...

  4. java 接口(基础思想一)

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

  5. Java接口interface

    Java接口interface 1.多个无关的类可以实现同一个接口. 2.一个类可以实现多个无关的接口. 3.与继承关系类似,接口与实现类之间存在多态性. 接口(interface)是抽象方法和常量值 ...

  6. java 接口详解

    定义接口 接口继承和实现继承的规则不同,一个类只有一个直接父类,但可以实现多个接口.Java 接口本身没有任何实现,只描述 public 行为,因此 Java 接口比 Java 抽象类更抽象化.Jav ...

  7. [转] Java接口_interface_implements

    相对抽象类来讲,接口就是比抽象类还要抽象的抽象类,丝毫不带半点实现的内容.接口可以更加规范的对子类进行约束.接口全面地专业地实现了:规范和具体实现的分离.接口就是规范,定义的是一组规则,提现了现实世界 ...

  8. Java多态的本质

    今天复习了java多态,感觉收获颇多.多态的实现方式有两种,继承父类和实现接口.本质体现在重写上,不同的类重写时体现出不同的特征.编译时和运行时的不同上.编译时只能调用父类的方法,如果调用了子类独有的 ...

  9. 深入理解Java接口

    一.接口的特点 接口中可以有变量和方法,接口中的变量会隐式的指定为public static final变量(并且只能是public static final变量),而方法会被隐式的指定为public ...

  10. Java接口和抽象类有什么区别,哪些时候用接口,哪些时候用抽象类?

    Java接口和抽象类有什么区别,哪些时候用接口,哪些时候用抽象类? 2013-01-05 17:16:09|  分类: JAVA |  标签:java  |举报|字号 订阅     下面比较一下两者的 ...

随机推荐

  1. 低价购买(LIS方案统计)

    题意:https://www.luogu.com.cn/problem/P1108 如果两个数列组成的数字完全相同,那我们说这两个数列相同. 求出最长下降子序列的方案数. 题解来自 wjyyy大神. ...

  2. 【FreeRTOS学习05】深度解剖FreeRTOSConfig.h实现对系统的自定义剪裁

    ROM/RAM太小,因此要对系统进行剪裁: 相关文章 [FreeRTOS实战汇总]小白博主的RTOS学习实战快速进阶之路(持续更新) 文章目录 相关文章 1 系统的剪裁 2 FreeRTOSConfi ...

  3. 真正免费,不限页数的PDF转Word工具

    真正免费,不限页数的PDF转Word工具 我们知道PDF转Word工具非常多,但大部分都有各种限制,限大小,限页数,加水印等等. 这其中绝大部分其实并不能做到格式完全一样,遇到图片更是直接傻了. 我们 ...

  4. 【hdu1030】“坐标表示法”

    http://acm.hdu.edu.cn/showproblem.php?pid=1030 算法:以顶点为原点,建立坐标系,一个数可以唯一对应一个三元组(x, y, z),从任意一个点出发走一步,刚 ...

  5. OpenStack黄金十年:我与OpenStack的故事

    导读:从2010年到2020年,OpenStack项目整整走过了十个春夏秋冬.不管是OpenStack基金会,还是积极参与OpenStack社区的厂商.企业乃至开发者,想必都有肺腑之言想对OpenSt ...

  6. Mysql 常用函数(12)- left 函数

    Mysql常用函数的汇总,可看下面系列文章 https://www.cnblogs.com/poloyy/category/1765164.html left 的作用 返回字符串 str 中最左边的 ...

  7. struts2 进阶--异常捕获机制

    在SpringMvc中有自己的异常处理机制,struts2当然会有此功能,主要是在struts.xml中配置: <bean type="com.opensymphony.xwork2. ...

  8. 基于MySQL 的 SQL 优化总结

    文章首发于我的个人博客,欢迎访问.https://blog.itzhouq.cn/mysql1 基于MySQL 的 SQL 优化总结 在数据库运维过程中,优化 SQL 是 DBA 团队的日常任务.例行 ...

  9. 搞懂:MVVM模型以及VUE中的数据绑定数据劫持发布订阅模式

    搞懂:MVVM模式和Vue中的MVVM模式 MVVM MVVM : model - view - viewmodel的缩写,说都能直接说出来 model:模型,view:视图,view-Model:视 ...

  10. python操作excel----openpyxl模块

    openpyxl模块支持.xls和.xlsx格式的excel创建,但是只支持.xlsx格式的读取操作,不支持.xls的读取(可以使用xlrd模块来读取,写入操作也可使用xlwt模块),也可使用pand ...