为了账号安全,请及时绑定邮箱和手机立即绑定

Java LinkedHashMap为什么要实现Map接口?

Java LinkedHashMap为什么要实现Map接口?

呼如林 2019-03-20 17:15:59
HashMap已经实现了Map接口,LinkedHashMap既然继承了HashMap,为什么还要implements一遍,是为了保留自己跟父类HashMap中Map方法不一样的可能性吗?如果是,那为什么不直接重写,还要再继承呢?附:LinkedHashMap源代码public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V> {/*省略内部代码*/}
查看完整描述

3 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

JDK的Collection源码里这种写法是很多的。
其实我们必须要承认,这种写法是没有任何副作用的。
但是这样写有一个好处,单独打开LinkedHashMap的源码,你就知道了它继承了哪个类,并实现了哪个接口。换句话说,不用去点开HashMap的源代码才能知道原来LinkedHashMap实现了Map。也就是,你不用在继承关系中苦苦徘徊,特别是当类与类之间的继承关系很复杂的时候。

这种出于人性化考虑的代码写法,还有一些例子,比如
接口继承了接口,但子接口会显式声明父接口中的所有方法,并显式加上@Override这样的注解,以特别说明这个方法是从父接口继承而来的,跟我自己定义的接口没关系。


查看完整回答
反对 回复 2019-04-22
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

其实这也许只是Java开发者的一种做法罢了。
通常我们的需求会说某某类需要实现哪些接口,但实际上,我们如果费劲去查找这些接口相互的依赖然后去排除重复的项目,其过程是繁琐的,况且这些重复项也会在编译时自动处理掉。所以这些人就直接写出那些被要求实现的类,省去人工去重的麻烦了。

查看完整回答
反对 回复 2019-04-22
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

你看源码只看到了类的定义,而没有更深层次的探索下去这样的原因。我们知道在java中是单继承的,只可以继承一个类,但是可以实现多个不同的接口。


 源码LinkedHashMap:

    public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V> 

    源码HashMap:

    public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable 


之所以这样设计,我想有一下几个原因:

1.LinkedHashMap要保留Map这种数据结构的特性,因此它要实现Map所有的方法。

2.LinkedHashMap是对HashMap中无序问题提出的改进,因此,它继承了HashMap。

试想,如果你只继承了HashMap,而没有实现Map接口,那么是不是Map中的一些方法,LinkedHashMap可以不需要去实现的啊?那么LinkedHashMap保留Map这种数据结构的特性也就失去意义了。


仅供参考~~~


查看完整回答
反对 回复 2019-04-22
  • 3 回答
  • 0 关注
  • 885 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信