Java中接口作用的理解[通俗易懂]

Java中接口作用的理解[通俗易懂]关于Java中接口作用的深入理解。这是个很容易遇到的问题吧,看下面红色的部分应该就能理解了。/2019/3/1补充:接口的存在也是为了弥补类无法多继承的缺点,假设一个情况,父类–Animal子类–Dog、Cat、People、Sheep、Tiger、Lion。假设在Animal中都存在eat()这个公有的方法。但是Tiger和Lion、People还拥有…

大家好,又见面了,我是你们的朋友全栈君。

关于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接口的作用和意义

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145121.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • IIS下图片文件防盗链的办法「建议收藏」

    IIS下图片文件防盗链的办法「建议收藏」IIS不支持UrlRewrite。  所以我们需要通过安装第三方服务器扩展让IIS支持UrlRewrite。  目前有一种产品能比较好地支持IIS的UrlRewrite,名字叫ISAPI_Rewrite。  下载地址在:[url]http://www.helicontech.com/download/[/url]具体的设置方法:修改http.ini文件…

    2022年7月23日
    9
  • yum apache mysql php 配置_Linux Apache php MySQL 安装配置(Centos 6.4 yum安装)「建议收藏」

    yum apache mysql php 配置_Linux Apache php MySQL 安装配置(Centos 6.4 yum安装)「建议收藏」一、yum准备1.Yum(全称为YellowdogUpdater,Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。2.在安装软件时报’Couldn’tresolvehost’mirrorli…

    2022年7月12日
    14
  • Android StrictMode 详解

    Android StrictMode 详解Android2.3提供一个称为严苛模式(StrictMode)的调试特性,Google称该特性已经使数百个Android上的Google应用程序受益。它将报告与线程及虚拟机相关的策略违例。一旦检测到策略违例(policyviolation),将获得警告,其包含了一个栈trace显示你的应用在何处发生违例。可以强制用警告代替崩溃(crash),也可以仅将警告计入日志,让你的应用继续执行St

    2022年6月1日
    36
  • 反射之动态拼接sql字符串「建议收藏」

    反射之动态拼接sql字符串「建议收藏」反射之动态拼接sql字符串前言自己在学习JDBC连接数据库,不用框架手动实现时,个人觉得反射动态拼接sql的思想很好,当然了大家伙觉得好才是真的好(广州好迪,手动狗头),所以才有了本文对该知识点梳理与总结。分享给大家,下面开始步入文章的正文,亲们不要掉队。正文…

    2025年5月27日
    2
  • Hive学习3:Hive三种建表语句详解

    Hive学习3:Hive三种建表语句详解Hive学习3:Hive三种建表语句详解

    2025年8月31日
    4
  • Java并发编程之ConcurrentSkipListMap

    Java并发编程之ConcurrentSkipListMapConcurrentSkipListMap数据结构抓住了数据结构,对于理解整个ConcurrentSkipListMap有很重要的作用,其实,通过源码可知其数据结构如下。可以看到ConcurrentSkipListMap的数据结构使用的是跳表,每一个HeadIndex、Index结点都会包含一个对Node的引用,同一垂直方向上的Index、HeadIndex结点都包含了最底层的Node结点的…

    2025年5月22日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号