登录
    Technology changes quickly but people's minds change slowly.

关于Java集合类继承了抽象类还要实现接口的一些探讨

人丑多读书 破玉 1363次浏览 0个评论

  今天在看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/


华裳绕指柔, 版权所有丨如未注明 , 均为原创|转载请注明关于Java集合类继承了抽象类还要实现接口的一些探讨
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址