今天在看HashMap 的时候,看着它继承了AbstractMap并且还实现了Map接口,按道理说只继承AbstractMap就够用了,为什么还要实现Map接口呢。
看了下主要有两种说法:
1.代理(动态代理的反射机制)
第一种是代理,我首先想到的也是这种,因为如果不实现Map接口,我们通过反射机制就无法获取HashMap 是否是Map接口
代码如下,我们自己定义一个MagicMap 继承AbstractMap 不实现Map接口
public class MagicMap extends AbstractMap { // ...... }
然后我们通过反射机制取MagicMap 的接口,是取不到Map的
Map magicMap=new MagicMap(); for(Class c:magicMap.getClass().getInterfaces()){ System.out.println(c); }
我们再让MagicMap 实现Map接口,这样我们通过反射机制就能取到Map
public class MagicMap extends AbstractMap implements Map { //.... }
2.开发规范
如果不实现对应的抽象类也不会有影响,只是实现对应抽象类后能帮助我们理解代码,而无需通过给定类的完整层次结构。不实现的话需要迭代类层次结构。
参见:StackOverflow
https://stackoverflow.com/questions/3854748/