java map怎么用_面试官:java接口的意义,程序汪:我知道怎么用,意义不知道

程序员、编程、Java语言、后端开发、软件开发

Java疑问

为什么要使用接口interface?(好抽象的感觉)

接口的作用是什么?(人家习惯写类)

为什么不直接在实例类中进行方法实现,而是需要首先进行接口的定义?

是不是多此一举了?(麻烦死了)

我们先带着这些疑问去学习下java这个接口有什么神器功效

基础准备

  • 向上转型为多个基类型
  • 接口
  • 父类引用指向子类实现
  • 动态绑定
  • 代码复用

spring源码

大家来体验下spring源码里的接口

有木有眼花缭乱的感觉啊

搞懂了这些接口,spring源码你也啃的下来了

哈哈哈哈

44cc83381f29e400605306f52816d4a8.png

spring接口的继承

看了有没有头皮发麻的感觉,这么多接口

ApplicationContext一下子继承这么多接口

57904901682859a9f1cea7840be8e00e.png

接口常识

  1. 接口中所有方法都是抽象的
  2. 接口不能直接实例化
  3. 接口之间可以extends实现多继承关系(如上spring源码中的)
  4. 接口必须实现全部方法

接口解密

1.为什么不直接在类里面写对应的方法, 而要多写1个接口(或抽象类)?

答案:实现多态.

jdk中的Map接口为例子,我们来聊聊天

HashMap

18fe26baac1cf75c3defc9382e15b87c.png

HashTable

ec218911dc00dc6a0af7cdb64c2c7a6a.png

这两个接口类都实现了Map接口

然后代码就可以

多态

会给开发带来相当大的灵活性

程序汪喜欢女神

比如女神 林志玲(Class),实现了 明星 和 女人 的接口。

这样在复杂的继承结构的某类中使用它,

以后在调用seeStar(Star star)或者seeWomen(Women women)方法时,

只要传入其实现类(林志玲)即可。

多态的代码案例

Map extInfo = new HashMap();

Map treeMap = new TreeMap();

继续发问多态有什么好处(提高代码复用性)

在很多业务复杂或框架代码中,需要根据特定入参类型调用不同的代码逻辑

为了提高代码复用性,接口威力慢慢体现出来了

1

Map集合元素的比较,这是写了一个工具类入参是Map接口,注意不是HashMap或TreeMap

这里一个工具方法就搞定了,如果没有接口多态的特性,你需要写多个集合比较方法,

那是相当的冗余

public static boolean equals(Map left, Map right) {

//TODO 集合元素比较 ,代码省略

}

什么情况下应该使用接口而不用抽象类

抽象类和接口都可以实现多态

接口侧重表示一种能力

例子1

Spring源码中有很多带Aware后缀的接口

开始看这是什么鬼

其实都是一种获取某资源能力的接口

如下就是获取ApplicationContext资源的能力接口

e323d45aca538b79e5cb809f0f207557.png

例子2

jdk源码中也有很多带able后缀的接口

如下迭代器

下面集合类都继承了Collection间接拥有了迭代器能力

ArrayList

HashSet

d1e226c071c138565251287f36cfb463.png

例子3

Comparable 比较强

只有继承了这个接口就拥有排序的能力了

CModel 实现了了Comparable 接口

List cModel= new ArrayList();

Collections.sort(cModel);

Collections源码中

d683b2790236c4e97db00cc065cc4d1f.png

集合排序例子

c7d86a2554edc0c40ca420f64361f611.png

运行代码

6f0ca7965fbf585a5908f45f2667c882.png

底层jdk代码

7ecf67c3ca786ebc3e824beba7147a32.png

总结

  1. 接口可以实现多态,达到了完全解耦
  2. 提供代码复用性
  3. 提供一种通用的能力,就要考虑使用接口了
  4. 接口能提供多继承的能力,抽象类不行
  5. 设计模式中大量使用了接口的特性

历史文章

Java向上向下转型


欢迎沟通交流,在下图里

680e4b8e5cc7f0a4420181f9f188c6f5.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值