如题

解决方案 »

  1.   

    有问题吗,很正常啊!
    HashMap 继承自 AbstractMap, 既然父类实现了 Map 接口,子类当然也实现了Map接口。 不这样才奇怪呢!
      

  2.   

    就拿remove(Object key)方法来说,Map接口中定义了此方法,AbstractMap实现了此方法,如果HashMap想要重写此方法就必须implements Map,否则重写不了,我的理解就是这样的,不知道LZ是否受用?
      

  3.   

    首先AbstractMap和HashMap都实现了Map接口
    HashMap需要使用AbstractMap类的方法,所以继承AbstractMap
    就这样感觉好像是实现了两次Map接口
      

  4.   

    哦,对了
    为什么都要先实现Map接口呢?
    因为接口可以说是一种统一协议,既然你要用我的东西,必须先遵守我的这个协议(个人见解)
      

  5.   

    同意4 楼的,我上面有说“必须implements   Map,否则重写不了”,这句是错误的。因为子类是可以直接重写父类的方法
      

  6.   

    如果HashMap从AbstractMap继承下来,拥有Map接口。
    未来的日子里,如果AbstractMap类被废弃,HashMap是谁的子类?它什么也不是
    如果HashMap先实现Map接口,不管AbstractMap存不存在,我都是遵循协议生存,有AbstractMap的时候HashMap
    可以多用几个方法,没有他,HashMap少用几个方法,或者自己写。
      

  7.   

    所有想具有Map接口的功能都要先实现Map接口
    然后你愿意继承什么继承什么!包括继承同样
    实现Map接口的类!
      

  8.   

    7楼说的有点意思
    不过我感觉这个问题似乎还是没有找到根源
    有的Map继承了AbstractMap类,如: AttributeMap, ConcurrentHashMap, NavigableSubMap等等
    但是没有直接实现Map接口
    有的类像HashMap一样,既继承自已经实现Map的类,又直接实现了Map接口
    如: IdentityHashMap, WeakHashMap, SubMap等等
    如果AbstractMap类被废弃,HashMap是谁的子类?
    但是在java API中找不到关于任何要废弃该类的意思
    Sun这样做似乎另有用意继续等待中...
      

  9.   

    其实除了SUN自己知道为什么这么做以外,其他人也只是猜测
    猜测的结果符合你的思想就可以说是对的,也就是你所认同的
    首先一个类要有一个接口的功能就要实现它(这个类是独自存
    在的,没有继承其他类,不依赖父类,有父类没父类我都可以
    用,因为我实现了接口,即使继承了一个同样实现接口的类,
    也和我没什么关系,只是我可以使用我所继承类的方法)
    或是
    继承实现接口的类(虽然这个类也可以使用接口的功能,但这
    种继承依赖父类,就是当父类不存在的时候,子类也没有存在
    的必要,)

    有的时候按照中国的文化很难明白外国人是怎么想的
    大家都觉得父与子的关系比遵循协议更重要,子继承父天经地义的正确,
    其实计算机不知道你什么父什么子的这种关系有多密切,在原则的世界里,
    想用我的东西,就要先满足我的要求(协议),剩下的你愿意是
    谁的儿子就是谁的儿子!------这样就出现了有的类先实现接口,
    然后也凑巧继承了实现接口的其他类,这个父类也只是子类完成需
    求的一个工具,不存在伦理关系!
    第二个:有的类直接继承父类,而拥有了一些父类实现接口的方法。
    这样子类只是拿来用你父类的东西,其他的事情子类什么也不管,子
    类不需要知道父类实现什么什么接口,子类也不需要实现什么什么接口!
    你父类有,我就能用!如果父类废弃那么
    他的这个子类没有存在的意义,一样的被废弃。和他通过父类实现接
    口没有关系,再说那也不是你子类实现的,只是你可以直接拿来用!两种不同的方式也只是解决不同的业务需求,解决同一件事情的方法有很多
    上面的也只是两种而已,根据情况选择用那种!你要是编写自己的类和接口
    的话,在不同的业务需求上也会有以上的不同选择,找更好的去做!至于为什么
    这么做也只有SUN知道,只有它才能了解业务需求是什么样的,怎么继承或者实现
    才能满足多数人的需求!很惭愧,我一中国人中文学得这么滥!可能不是很明白!见谅以上仅代表个人意见
      

  10.   

    AttributeMap,   ConcurrentHashMap,   NavigableSubMap
    这些也都实现了Map接口
      

  11.   

    何必把问题想得那么复杂?其实,个人认为,就是为了增强点可读性罢了。HashMap继承了AbstractMap就是实现了Map,再来一个implements Map,没有任何实质性的作用。但是,因为Map比AbstractMap的知名度要高得多,如果HashMap的接口列表有一个Map,那么读者一眼就可以判断出HashMap“是一个”Map;
    而如果单是extends AbstractMap,字面上体现不出这一点。
    毕竟,绝大多数java程序员更关心一个类是否是一个Map,而很少关心一个类是否是一个AbstractMap。不光是Map家族,List,Set也都一样,ArrayList继承AbstractList又实现List,HashSet继承AbstractSet又实现Set,等等。呵呵。