# 传统的经典问题 Java 的 Interface 是干什么的

**URL:** <https://www.isharkfly.com/t/java-interface/14997>\
**Category:** 职友\
**Tags:** java, 面经\
**Created:** [September 20, 2023, 1:54pm UTC](https://www.isharkfly.com/t/java-interface/14997 "2023-09-20T13:54:33Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![honeymoose](https://www.isharkfly.com/user_avatar/www.isharkfly.com/honeymoose/32/20796_2.png) [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Post date:** [September 20, 2023, 1:54pm UTC](https://www.isharkfly.com/t/java-interface/14997/1 "2023-09-20T13:54:33Z")

</div>

传统的经典问题 Java 的 Interface 是干什么

## 解答

上面的这个问题应该还是比较好回答的吧。

只要你做过 Java ，通常 Interface 的问题多多少少会遇到，而且可能会遇到一大堆。

在JAVA编程语言中是一个抽象类型（Abstract Type），它被**用来要求类(Class)必须实现指定的方法，使不同类的对象可以利用相同的界面进行沟通** 。

简单来说，接口就是用来实现的。

因为前一段时间我们研究了下接口，请参考文章：[说完 Java 的 Abstract 后再来说说接口 （interface ）](https://www.isharkfly.com/t/java-abstract-interface/14838) 中的内容。

同时，在面试的时候，我还举例了一个 HttpClient 和 OkHttp 的用接口实现的问题。

举个实际使用的例子，我们现在有一个这样的需求，发送一个 HTTP 请求，获得用户的数据。

当我们希望对这个进行实现的时候，我们可以使用 apache 的 httpclient 这个包来完成 http 的调用，我们也可以使用 OKHttp 这个包来实现 http 的调用。

为了定义大家都使用的方法，我们就在这 2 个调用之前，定义了一个接口来要求我们的 2 个子类分别使用不同的包来实现完成调用返回结果。

别忘了，JPA 中的 Repository 也是定义成接口了喔。

通常,您的存储库接口将会扩展`Repository` , `CrudRepository` 或`PagingAndSortingRepository`

 ![2023-09-20_14-10-56](https://cdn.isharkfly.com/com-isharkfly-www/discourse-uploads/original/2X/4/409ecce4f13479ba3331bc8bad2c41df0e10a5f8.png)

这样看来，这个接口是不是有点意思呀。
