转载于: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号卖炸鸡(硬编码),很显然这样我们要记住的很多很多东西(代码量剧增),而且,如果有新的店卖炸鸡腿,我们也不可能知道(不利于扩展)。

 

最新文章

  1. php构造方法与析构方法
  2. vs 只能没有智能提示的解决方法
  3. sqlzoo.net刷题4
  4. Math中floor,round和ceil的区别
  5. cojs EX_香蕉 题解报告
  6. Java - 正则表达式常用操作
  7. win7 任务计划 任务映像已损坏或篡改(异常来自HRESULT:0x80041321)
  8. c# 弹出框-后台调前台函数
  9. mysqldump指定编码导出数据
  10. 自己做的notepad++ FTP同步插件
  11. 洛谷P5284 [十二省联考2019]字符串问题 [后缀树]
  12. python中hasattr()、getattr()、setattr()函数的使用
  13. python3 十六进制字符串进行分割并累加
  14. date、sleep和usleep命令
  15. Lodop打印设计、维护、预览、直接打印简单介绍
  16. PHP array_combine()
  17. 调用微信定位功能 lat _ lng php方法
  18. (3)HomeAssistant 连接MQTT
  19. Java之旅--定时任务(Timer、Quartz、Spring、LinuxCron)
  20. Zabbix监控数据库连通性所遇问题

热门文章

  1. UVALive 5031 Graph and Queries (Treap)
  2. codeforecs Gym 100286B Blind Walk
  3. Spring归纳
  4. Android颜色选择器介绍
  5. opencv c++编译
  6. BCB:WebBrowser 控件说明
  7. Twisted 综述
  8. 安装IAR ewarm
  9. 看了下opengl相关的资料,踩了一个坑,记录一下
  10. 标准C++(1)