接口的定义

接口,百度百科:接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被内部修改而不影响外界其他实体与其交互的方式。

—接口是干这个的,但是平常我们使用接口都是回调,比如我完成了一个东西,我回调一下,like this

Created with Raphaël 2.2.0 EVENT_DONE 回调接口 choose A()? A() OTHER OP B() yes no

代码的话,就是这个样子

public void start(Listener listener){//xxxxxxxxxxxxxxxxxxxxxx//listener.done(); // Alistener.error(); //B
}//某个实现了接口的类
public class OP implements Listener{public void done(){//具体操作}public void error(){//....}
}

ok,平常的话就这么干的,拿来做回调了(接口本来就回调啊)
上面的定义,表名接口是一个内外交流的方式,打个比方:

一个充电宝,一根数据线,一部android(ios)。
充电宝一般有两个输出口,一个1A,一个2A。
那这两个端口就是给外部使用的,内部干嘛。内部就负责一系列的操作,最后给出1A/2A的电流就ok。数据线就是连接手机和充电宝的桥梁(Bridge),然后手机得到电流输入就自己负责更新电池Icon_UI以及硬件电池的蓄电。

写点代码整理一下,用内外部交流方法重新理解JAVA接口的使用,就可以这样创建CLASS了。

先定义好两个接口,就好比开放出来的口子让你用的

PowerOutElectric.java

public interface PowerOutElectric {void out1A();//输出1A的电流void out2A();//2A的电流
}

MobileGetElectric.java

public interface MobileGetElectric {void start2Full(double p);//开始前进,向着满格进发
}

两种电器都定义好了接口——让外部使用。
接下来就是两个电器各自之间的方法(比如如何将化学能转化为电能,电能转化为化学能)

PowerBank.java

package kr;import java.util.Timer;
import java.util.TimerTask;public class PowerBank{//1kw*h = 3.6*10^6J  -> 1000w*1s = 1000J//现存化学能 一直输出 4小时private static double chemistry = 15000;//转化技术等级 e.g: 1 -> 80% 升一级提升2%// 上限99(不可能不损耗,这辈子都不可能,没有真香定律!)private int techLevel = 5;//电能计算公式//W = U * I * T  电压默认5V -->> 5V*1A*1S = 5Jprivate int v = 5;private int a1 = 1;private int a2 = 2;private double out;private PowerOutElectric e;public PowerBank(PowerOutElectric electric){this.e = electric;}public void startWork(int port){Timer timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {//p = U * T 功率 以及 损耗if(port == 1){out = v * 10 * ((techLevel-1) * 0.02 + 0.8) * a1;}else {out = v * 10 * ((techLevel-1) * 0.02 + 0.8) * a2;}chemistry -= out;if(chemistry <= 0){timer.cancel();System.out.println("充电宝没电了");out += chemistry;chemistry = 0;}e.out1A(out);showPower();}},0,10);//单位s}private void showPower(){System.out.println("剩余电量"+getPower());}private double getPower(){return chemistry;}
}

上述是充电宝自主的操作一系列结束后将电能输出出去,usb就会通过充电宝暴露出的接口(1A,2A)得到能量。并且将能量传输给手机。
Mobile.java

public class Mobile implements MobileGetElectric {private static double power = 0.1;private void chong(double p) {//每100J成为10%的电量power += p / 100 * 0.1;System.out.println(String.format("当前电量:%.1f%%", power * 100));}private boolean panduan() {if (power >= 1) {System.out.println("充满了");return false;//通知电量满了,usb可以断开了//TODO:断开操作.}return true;}@Overridepublic void start2Full(double p) {if (panduan())chong(p);}
}

但是两个电器要交流怎么办?就需要USB这根线,通过这个线让两个电器实现交(zhe)流(xue)
USB.java

public class USB implements PowerOutElectric{private PowerBank powerBank;private Mobile mobile;//private ChaTou chaTou;  //插头private int port;private static final String material = "Cu";public USB(int port){//决定用哪个端口this.port = port;this.powerBank = new PowerBank(this);}public void connect(Mobile mobile){this.mobile = mobile;startWork();}private void startWork(){//或者插头+手机if(powerBank!=null&&mobile!=null){powerBank.startWork(port);}}private void transfer(double p){double f;//最终结果double b;//损耗switch (material){case "Cu":b = 0.05;break;case "Light":b = 0.01;break;default: b = 0.15;}f = p * b;mobile.start2Full(f);}@Overridepublic void out1A(double out) {transfer(out);System.out.println("收到电量" + out);}@Overridepublic void out2A(double out) {transfer(out);System.out.println("收到电量" + out);}
}

ok,USB实现了充电宝的接口,因为这是充电宝暴露出来的,usb调用了手机的接口,这是手机自己需要的,拿给其他人就拿不到值

就好比这样去梳理

将数据输出的,可以将一些操作暴露出去,因为TA需要告诉使用这些接口的东西,你们要的东西来了(usb需要充电宝的能量)

接受数据的,需要将拿到数据的操作暴露出来(手机将充电接口暴露出来了,意思就是:诺,我的口子在这,电能从这里给我。为什么要这样干,手机的接口这么多,没告诉哪个接口干什么的,充电插耳机?emmmmm以前的手机就这么干的),然后通过内部的操作将得到的数据(电能转换为自己的能量储蓄)

然后就需要一个Person了,拿着这三个东西进行最后的调(jie)试(he)。
其实“回调”只是将平常的“接口”改了个名字,同时也是为了完成我们的某些架构设计

源码链接:https://download.csdn.net/download/qq_34206863/10859227

欢迎访问我的网页Kkrisez,不定时将认为有用的搬过去

java interface 理解相关推荐

  1. 谈谈你对Java的理解

    谈谈你对Java的理解 这个考察的很宽泛,答案不是唯一的,往往考察多个方面,其实这个问题考察的是你是否真的掌握了Java,对基础知识点的理解是否真的很清楚.是否掌握主要的模块和运行 原理等,同时也会对 ...

  2. 从Java代码到Java堆理解和优化您的应用程序的内存使用

    从Java代码到Java堆理解和优化您的应用程序的内存使用 简介: 本文将为您提供 Java? 代码内存使用情况的深入见解,包括将 int 值置入一个Integer 对象的内存开销.对象委托的成本和不 ...

  3. java interfaceof,java interface教程

    发表于 2012-10-10 09:54:47 by 月小升 java interface就是表示一个接口,接口只有方法,但是没有实际的实现.实现他的接口可以采用不同的程序. Java the int ...

  4. JVM面试1 :谈谈你对Java的理解

    谈谈你对Java的理解 如何查看字节码? 使用 javap

  5. Java——深入理解Java异常体系

    Java--深入理解Java异常体系 参考文章: (1)Java--深入理解Java异常体系 (2)https://www.cnblogs.com/wugongzi/p/11858228.html 备 ...

  6. java interface和类的 extends与implement 的简单总结

    interface和类.extends与implement 接口 一个接口则可以同时extends多个接口,却不能implements任何接口 类 一个类只能extends一个父类,但可以implem ...

  7. 谈谈你对java的理解,java是“解释执行”这句话对吗?

    谈谈你对java的理解,java是"解释执行"这句话对吗? 先科普下什么是"解释执行"? 什么是"编译执行"? • 解释执行 解释执行时高级 ...

  8. Java 深入理解深拷贝和浅拷贝区别

    title: Java 深入理解深拷贝和浅拷贝区别 date: 2021-6-19 updated: 2021-6-19 tags: Java 深拷贝和浅拷贝 categories: 面试 Java ...

  9. java接口interface理解,接口作用

    1. 固定统一调用的方法(想想适配器模式) public void somefunc(HttpServletRequest resq){ //调用时传来实现该接口的类就行 //里面直接调用接口方法 2 ...

最新文章

  1. idea中配置maven的骨架本地下载方式
  2. 精通python设计模式-精通Python设计模式
  3. Java中的访问者设计模式–示例教程
  4. leetcode 61 python
  5. oracle 创建用户且只有查看权限
  6. ctfmon.exe windows输入法无法启动
  7. 决策树分析例题经典案例_分析模型案例解析:决策树分析法
  8. 天天飞车六大研发经验
  9. 网络打印机拒绝访问,无法连接处理方法汇总
  10. 简单测试ROS里面C++ 和 python 文件获取参数格式
  11. 【Chapter 1】架构的结构
  12. BPDU协议分析-sniffer应用
  13. 概念:伪随机数、种子以及C中的随机函数
  14. Mac无法开机?如何修复并使其重新启动
  15. python自定义异常必须继承exception 对不对_在Java中允许用户自定义异常,但自定义的异常类必须继承自Exception或其子类。()...
  16. 根据文本信息自动生成图片怎么操作?值得收藏的几种转换方法
  17. CSS3动画结束闪烁问题
  18. Ubuntu Qt无法使用搜狗输入法
  19. 移动开发的英文单词发音
  20. 2010 小玩股票的进

热门文章

  1. VMware安装Centos7联网
  2. 【记录】C语言|you-get+Danmu2Ass《为了更舒适地看龙门镖局,我竟然……》
  3. 将一串数字转为一个数组的形式,如1234 = [1234]
  4. [https+certificates] 在IIS7上创建证书CSR申请
  5. 图像处理中几何畸变校正,图像纠正的方法有哪些
  6. 怎样用HTML做一份精美的简历(html5+css)
  7. 如何成为一名优秀的前端开发人员?初到公司到融入公司,这些事情你需要知道!
  8. 孟岩:学习DeFi的动机和意义
  9. “2017金融科技·数据驱动金融商业裂变价值峰会”圆满落幕,数据猿携手金融产业精英探索行业新方向
  10. 魔兽争霸RPG游戏-军团战争-游戏经验总结