日期:2014-05-20  浏览次数:20704 次

求教一个java问题,求高手
java源码中有一小段看不懂,请教各位牛人
public class HashMap<K,V>
    extends AbstractMap<K,V>
    implements Map<K,V>, Cloneable, Serializable
这是java source中关于HashMap的定义,我很奇怪的是,为什么HashMap的父类AbstractMap已经implements了Map<K,V>接口,而在HashMap的定义中又再一次的声明implements Map<K,V>接口呢?这样做的意义何在?
恳请各位解答我的疑惑额
------解决方案--------------------
引用:
我知道的不多,但是区别还是有的,如果HashMap没有实现Map, Map a = new HashMap(); a.getClass().getInterfaces()得到的Class数组将没有Map。 也就是说getInterfaces只能获取到implements后面指定的Class不能获取父级实现的Class。

由此引出的问题还是很多的, 比如在反射中很多都是根据Class instancesOf 做判断,可以像见会有些场景需要判断对象a是不是Map而不会去判断m是不是一个AbstractMap,因为Map是接口,它真正定义了对象特征。
还有就是在项目中我有个业务service接口 A,和它的一个实现Aimpl1, 现在我要加一个实现Aimpl2,按你的意思我可以Aimpl2直接继承Aimpl1覆盖掉我像要重写的方法,但是我就无法切入事务了,以为事务Aop配置是切入到接口层的,但是我有些方法不是重写的,所以就变成了Aimpl2 extends Aimpl1 implements A。