关于Java中接口作用的深入理解。这是个很容易遇到的问题吧,看下面红色的部分应该就能理解了。要把接口视作一种共同规范。


/ 2019/3/1 补充 : 接口的存在也是为了弥补类无法多继承的缺点,假设一个情况,父类--Animal  子类--Dog、Cat 、People、Sheep、Tiger、Lion。假设在 Animal 中都存在 eat()这个公有的方法。但是  Tiger 和  Lion 、People 还拥有  Hunt  的方法,但是hunt 不存在在 Dog / Cat中,所以需要对  Tiger Lion  People 上面新建一个 接口。用于特定标识他们公有的。

------- 其实上面的情况还有种方法解决 : 即在 父类下面再写一个三者的父类,加入新的动作,但是,这样五者不是在同一级上面的了,代码结构混乱,所以引入了接口。而在面向对象的Python语言中是允许多继承的。   总之,引入抽象类和接口是为了是代码逻辑更加清晰,建议去看一些简单的jdk源码,然后根据源码自己画一个类的UML图,理解一下平时所有的集合框架List Set这些的整体结构。


2019/3/22 补充 : 接口在扩展性方面的体现 : 类 B  调用了  接口 A里面的一个方法,但是这个方法在当前提供的 jar 里面并没有接口的实现类 , 而接口的实现类需要通过外部的添加才可以。 那么我只需要通过反射的方式加载外部特定的 jar 包,即可实现不同的方法。就是类似于  A 的接口方法并没有具体实现,而我调用A中某个方法,最终调用的 看我外部加载的什么样子的实现类 。 充分体现了 解耦的特性 。 这里的一个很明显的体现就是  使用  JDBC 的时候,需要从外部加载驱动 。。。Class.forName("com.mysql.jdbc.Driver"); ,但是我也可以加载其他的驱动,比如 SSH 框架里面的。体现了一种拔插的思维。


2019/4/26 补充: 今天在看 JDBC 源码的时候,发现第一句 的 class.forName(),做了很多的事情, 在jdk 中,只有  Driver 的一个接口,但是  mysql-connector-java.jar 这种类似的 jar 需要第三方去实现,  具体的Driver 实现类是在第三方的jar里面的,比如肯定还有 oracle的connector的jar。  这样就充分体现了扩展性,我在 class.forName 里面,指定加载 第三方的 Driver,那么在类加载的时候,可以完成 jdk 中 Driver 接口, 在 第三方jar 中具体实现的class,但是 我们知道就算知道接口也不行,因为在 jdk 中只有一个接口, 所以在 第三方 的jar里面,存在一个 配置文件,指向了在 第三方 jar 中具体实现了 jdk 中 sql 包下的 Driver 接口的 类,这样就可以通过反射的方式,获取到 第三方中具体实现类。   是不是 接口的 扩展性 非常的明显。  我只需要写接口,具体实现交给其他人去做,然后我使用的时候,只需要显示的加载某一个特定类,就可以获取到接口的实现类了。


1、首先是关于接口的疑问:

为什么要使用接口?接口的作用是什么?为什么不直接在实例类中进行方法实现,而是需要首先进行接口的定义?是不是多此一举了?

2、其次是关于接口的使用规范:

1、接口中可以定义常量,不能定义变量,如果你在接口中定义属性,那么通过反编译可以看见他会自动用public static final 修饰,接口中的属性都是全局静态常量,接口中的常量必须在定义时指定初始值。

2、 接口中所有的方法都是抽象方法,接口中方法都会自动用public abstract 修饰,即接口中只有全局抽象方法。

3、 接口不能实例化,接口中不能有构造。

4、 接口之间可以通过extends实现继承关系,一个接口可以继承多个接口,但接口不能继承类。

5、 接口的实现类必须实现接口的全部方法,否则必须定义为抽象类。

3、然后我们回答一下开始提出的问题:

2    接口的作用是什么?

笔者认为接口是一种协议。例如两个开发者,开发时间完全不一致,那么需要两个人的配合开发,则需要一个人讲接口写好,定义好其中所有的变量命名规范、函数定义规范。具体实现类的开发人员则只需要按照接口实现相应功能即可。

3、 为什么不在一个类是直接实现相应的方法,而是需要先进行接口抽象?

①首先是关于全局变量的定义,目的已经很清楚了。

②其次是说明一下接口的真正作用是建立在很多的对象类、并且类同时拥有很多的方法(需要实现的功能)。这种情景下,使用接口可以非常明显的感觉到接口的作用。

推荐的 关于 接口的文章: Java 接口(interface)的用途和好处_nvd11的专栏-CSDN博客_java接口的作用和意义

Java中接口作用的理解相关推荐

  1. 对java中接口的简单理解

    接口属于一个特殊的抽象类,继承的时候用 implements 实现,接口的继承不叫继承,叫做实现 接口的实现和类的继承有些类似,但是类的继承是单继承,接口可以多实现(多继承) 类的继承是对共性的继承, ...

  2. Java中接口的作用,为什么要写接口?

    ** Java中接口的作用 转载于:https://www.zhihu.com/question/20111251 ** **困惑:**例如我定义了一个接口,但是我在继承这个接口的类中还要写接口的实现 ...

  3. Java中接口、抽象类与内部类学习

    2019独角兽企业重金招聘Python工程师标准>>> Java中接口.抽象类与内部类学习 接口与内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类和抽象方法 抽象方 ...

  4. java中接口私有反方_接口中的Java 9私有方法

    java中接口私有反方 Java 9 has been released and there has been a lot of changes. Today we will look into Ja ...

  5. JAVA中接口存在的意义

    很多JAVA程序员对于接口存在的意义很疑惑.不知道接口到底是有什么作用,为什么要定义接口.好像定义接口是提前做了个多余的工作.下面我给大家总结了4点关于JAVA中接口存在的意义: 1.重要性:在Jav ...

  6. Java中Map集合如何理解(四)——精简

    目录 引言 概念 Map集合实现类 HashMap LinkedHashMap TreeMap 默认排序 自定义排序方式 常用API 遍历Map集合 键找值 键值对 Lambda表达式 结束语 引言 ...

  7. java中接口私有反方_Java 8:在接口中声明私有和受保护的方法

    java中接口私有反方 引入Java 8时,我们可以在接口中使用默认方法. 此功能的主要驱动程序是允许接口扩展,同时保留对旧接口版本的向后兼容性. 一个示例是在现有Collection类中引入stre ...

  8. java中接口文件创建_功能接口简介–在Java 8中重新创建的概念

    java中接口文件创建 世界各地的所有Java开发人员都将至少使用以下接口之一:java.lang.Runnable,java.awt.event.ActionListener,java.util.C ...

  9. Java中接口的多继承

    我们知道Java的类只能继承一个类,但可以实现多个接口.但是你知道么?Java中的接口却可以继承多个接口.本文就来说一说Java中接口的多继承. 进入主题之前,先扩展一下.Java为什么只支持单继承呢 ...

最新文章

  1. 运用Hibernate-Tools自动生成Java类和schema时,出现not found while looking for property...异常...
  2. Xamarin 2017.9.19更新
  3. SpringBoot笔记:SpringBoot集成SpringbootAdmin监控
  4. 面向对象分析与设计小结
  5. SQL 查找是否存在,别再 COUNT 了,很耗费时间的
  6. SAP UI5 DatePicker控件和语言设置相关的属性详解
  7. HDR和SDR的区别
  8. C#/VB.NET 复制Excel中的指定单元格区域
  9. rk3399_android10编译说明
  10. Antlr4 简单入门
  11. Android入门笔记13
  12. 要想混得好,必须认识21个人!
  13. ffmpeg实现视频马赛克特效
  14. 大学c语言基础知识必备大全,大学 C语言基础知识.ppt
  15. 【图像处理】记一次粗心:未加载opencv_world300d.dll
  16. nodejs安装及环境配置
  17. java-swing-下拉列表
  18. Nexus7二代刷机直升android10
  19. Python爬虫百度新闻标题
  20. 原SAP全球副总裁邓永富加盟金蝶,担任金蝶集团副总裁

热门文章

  1. 摩尔斯电码(morse)转换英文字符串c语言代码
  2. 青浦搬场公司教你搬家风水改造方法
  3. 【ESP32】按键驱动,长按、短按,可设置多个按键
  4. 【数据库篇】Redis知识点
  5. SNP同义突变引起致龋菌毒力变化
  6. 网络安全课第五节 XXE 漏洞的检测与防御
  7. 程序员离职后收到原公司 2400 元,被告违反竞业协议赔 18 万
  8. 经典合集 - WP8.1数据源
  9. vant混合表单校验,以及标题前加※
  10. 【屌丝逆袭】记录一下一个末流985强势逆袭拿到字节offer的经历,附上我的面经!