前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java中接口作用的理解[通俗易懂]

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

作者头像
全栈程序员站长
发布2022-08-27 10:42:15
4030
发布2022-08-27 10:42:15
举报
文章被收录于专栏:全栈程序员必看

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

关于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、 为什么不在一个类是直接实现相应的方法,而是需要先进行接口抽象?

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、首先是关于接口的疑问:
  • 2、其次是关于接口的使用规范:
  • 3、然后我们回答一下开始提出的问题:
  • 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/145121.html原文链接:https://javaforall.cn
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档