**

Java中接口的作用 转载于:https://www.zhihu.com/question/20111251

**

**困惑:**例如我定义了一个接口,但是我在继承这个接口的类中还要写接口的实现方法,那我不如直接就在这个类中写实现方法岂不是更便捷,还省去了定义接口?接口在java中的作用是什么?

总结回答:

接口是一种规范
软件开发大多是一个协作性的工作:电器和插座分别是不同人完成的,有了接口大家就能分头开干,都按照接口来办事,各自做完就能轻松地整合到一起。各部分的测试也更加方便。
***软件需要不断演化:***今天你用了公牛的插座,过了一年你可能换个西门子的插座,要做没有这套国家接口标准,各自为政,那估计你是换不了插座了。你想想,咱们每次去美国出差,都得带个转接头,否则就跪了,多不方便啊,因为接口规范不同啊!(这些个转接头你是不是闻道一种浓浓的Adapter模式的味道)。
而你所说的,直接写实现的方式在确定性的场景下当然也可以,不涉及到分工协作、变化性、测试方便等因素时,当然用不着接口了。比如一般情况下你犯不着为一个Pojo的getter和setter也弄个接口和实现分离。

接口在开发过程中可以快速分离工作内容。
比如调用者在写业务逻辑的时候需要一个功能,可能是数据库访问,或者复杂计算,但是他的工作专注于实现业务逻辑,不想分开精力去做底层实现,那么他只需要先实现一个接口,定义了规范,然后就可以继续他的业务逻辑代码了。而实现者可以根据这个接口规范,做具体的实现。
这样通过使用接口就可以快速的分离工作内容,达到团队并行工作的目的。

此外,如果规范是通过接口定义的,那么当你这个功能有多个实现时,你只要实现了这个接口,那么可以快速的替换具体实现,做到代码层面的完全可以分离。

*总结起来就一句话:*接口或者规范可以在开发过程中做到分离。

接口(英语:Interface),在JAVA编程语言中是一个抽象类型(Abstract Type),它被用来要求类(Class)必须实现指定的方法,使不同类的对象可以利用相同的界面进行沟通。接口通常以interface来宣告,它仅能包含方法签名(Method Signature)以及常数宣告(变量宣告包含了 static 及 final),一个接口不会包含方法的实现(仅有定义)。

接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须宣告为抽象类(Abstract Class)。另外,在Java中,接口类型可用来宣告一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。

接口就是个招牌
比如说你今年放假出去杭州旅游,玩了一上午,你也有点饿了,突然看到前面有个店子,上面挂着KFC,然后你就知道今天中饭有着落了。

KFC就是接口,我们看到了这个接口,就知道这个店会卖炸鸡腿(实现接口)。

那么为神马我们要去定义一个接口涅,这个店可以直接卖炸鸡腿啊(直接写实现方法),是的,这个店可以直接卖炸鸡腿,但没有挂KFC的招牌,我们就不能直接简单粗暴的冲进去叫服务员给两个炸鸡腿了。

要么,我们就要进去问,你这里卖不卖炸鸡腿啊,卖不卖汉堡啊,卖不卖圣代啊(这就是反射)。很显然,这样一家家的问实在是非常麻烦(反射性能很差)。
要么,我们就要记住,中山路108号卖炸鸡,黄山路45号卖炸鸡(硬编码),很显然这样我们要记住的很多很多东西(代码量剧增),而且,如果有新的店卖炸鸡腿,我们也不可能知道(不利于扩展)。

Java中接口的作用,为什么要写接口?相关推荐

  1. java中的静态变量的作用域_详解JAVA中static的作用

    1.深度总结 引用一位网友的话,说的非常好,如果别人问你static的作用:如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的:如果是说 可以构成 静态代码块,那别人认为你还可以: 如果你说 ...

  2. java中包装类的作用

    Java中包装类的作用 一.包装类是什么 包装类就是解决java的八种基本数据类型不面向对象的缺陷,而设计出来的一个个与每一个与基本类型相对应的类,这八种基本数据类型对应的类统称包装类(Wrapper ...

  3. Java中static的作用

    Java中static的作用 请先看下面这段程序: public class Hello{ public static void main(String[] args){ //(1) System.o ...

  4. Java中常用的类,包,接口

    Java中常用的类,包,接口 包名 说明 java.lang 该包提供了Java编程的基础类,例如 Object.Math.String.StringBuffer.System.Thread等,不使用 ...

  5. Java中重载的作用?

    Java中重载的作用? 重载定义:一个类中如果有多个同名方法但带有不同的参数列表,称为方法重载(Overload). 重载方法的参数列表不同是指参数的数据类型或个数或次序不同. 重载方法之间必须以参数 ...

  6. java中*和**的作用 以及 /和/*和/**的区别

    一.java中*和**的作用 "*"就表示了所有的文件,但是"*"并不包括子目录下的文件: "**"匹配包含任意级子目录中所有的文件: 二. ...

  7. 记录一下Java中final的作用

    记录一下Java中final的作用   final关键字可以修饰类.成员变量.方法.以及方法中的局部变量. 1.final修饰类   可以使用final将类声明为final类.final类不能被继承, ...

  8. JAVA中常量使用常量类或者常量接口还是使用枚举,错误代码和中文可变信息的枚举实现

    文章目录 关于"JAVA中常量使用常量类或者常量接口还是使用枚举",已有定论-使用枚举,原因就不再展开了. 借助java枚举,可以在定义错误名称和代码的同时,定义中文描述信息,但是 ...

  9. java中example函数作用_MyBatis逆向工程中的Mapper接口以及Example的实例函数及详解...

    一.mapper接口中的方法解析 mapper接口中的函数及方法 方法功能说明 int countByExample(UserExample example) thorws SQLException按 ...

  10. java中example函数作用_mybatis mapper学习4-MyBatis的Mapper接口以及Example的实例函数及详解...

    mybatis能够自动生成sql语句,也能够添加自定义sql语句 使用mybatis generator生成XX.java,XXExample.java,XXmapper.java,XXmapper. ...

最新文章

  1. C语言在VS2017环境下写俄罗斯方块的感悟
  2. php pdo 怎么循环,php – 在循环内绑定PDO语句的参数
  3. axure小程序模板_微信小程序模板案例收集
  4. matlab adc仿真,[转载]关于ADC仿真做FFT的设置和结果分析
  5. pgsql动态创建table
  6. php下载apk文件源码下载,php实现文件下载功能的几个代码分享
  7. pix2pix, CycleGAN和pix2pixHD(没有公式,容易理解)
  8. fatal error: torch/extension.h: No such file or directory
  9. Tensorflow实现数据分档操作
  10. 深入浅出通信原理连载145-389(Python代码版)
  11. apache和IIS共存,服务器对外统一使用80端口
  12. java虚拟怎么安装_JAVA虚拟机怎么安装?
  13. 如何做好系统分析与设计
  14. Github Desktop for macos_zh 汉化
  15. FlinkKafkaProducer源码解读
  16. 学计算机专业的人,哪些人适合学习计算机专业?
  17. Why do we insist? 打卡
  18. 分享一个带语音root的CM311-1a线刷包
  19. SparkSQL ClickHouse RoaringBitmap使用实践
  20. OKR-Periods of Words - kmp

热门文章

  1. 实现炫酷的卡片式动画!
  2. PDF转成Word或PPT后还是图片是怎么回事?
  3. flutter报错: your app to be migrated to the Android embedding v2
  4. 批处理删除指定名称的打印机
  5. 利用Java实现从键盘输入一个double型数,输出该数的整数部分和小数部分
  6. ue4游戏传送门实现
  7. echarts的饼图制作分析
  8. C# 中的委托和事件[转自张子扬]
  9. 阿里arouter框架使用
  10. 计算机面试工作计划,信息技术部面试自我介绍