憨厚生

----Java's Slave----
***Java's Host***

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  165 随笔 :: 17 文章 :: 90 评论 :: 0 Trackbacks
        在JAVA原代码中可以看到ArrayList类的实现.其中定义ArrayList类的时候,如下

        public class ArrayList<E> extends AbstractList<E>
            implements List<E>, RandomAccess, Cloneable, java.io.Serializable
        
        在这里我有个疑惑,ArrayList继承了AbstractList,而AbstractList实现了List接口.为什么不直接这样写呢,如下:

        public class ArrayList<E> extends AbstractList<E>
            implements RandomAccess, Cloneable, java.io.Serializable

        那个能解释一下!谢谢先!
posted on 2009-10-27 08:53 二胡 阅读(1886) 评论(10)  编辑  收藏 所属分类: Java

评论

# re: 关于ArrayList类的疑惑! 2009-10-27 09:13 yezi
哈哈,这个我也不知道。你看看spring源码中的,也存在这样的问题  回复  更多评论
  

# re: 关于ArrayList类的疑惑![未登录] 2009-10-27 09:25 Jet
这是一种编码习惯,这样做的好处在于ArrayList类不会忘记实现List接口中的方法。  回复  更多评论
  

# re: 关于ArrayList类的疑惑! 2009-10-27 09:32 凌晨风
同意楼上的  回复  更多评论
  

# re: 关于ArrayList类的疑惑! 2009-10-27 09:33 zhxing
我觉得应该是方便于扩展吧。。
下面是java doc 上说得
public abstract class AbstractList<E>extends AbstractCollection<E>implements List<E>此类提供 List 接口的骨干实现,以最大限度地减少实现“随机访问”数据存储(如数组)支持的该接口所需的工作。对于连续的访问数据(如链表),应优先使用 AbstractSequentialList,而不是此类。
  回复  更多评论
  

# re: 关于ArrayList类的疑惑! 2009-10-27 09:40 charlie's logic
为了强调接口编程。

List list=new ArrayList();





  回复  更多评论
  

# re: 关于ArrayList类的疑惑! 2009-10-27 09:51 feenn
@charlie's logic
re  回复  更多评论
  

# re: 关于ArrayList类的疑惑! 2009-10-27 09:59 二胡
@charlie's logic
AbstractList 类也实现了List接口的
所以我认为,也可以写成
List list=new ArrayList();

注:AbstractList类定义如下:
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {  回复  更多评论
  

# re: 关于ArrayList类的疑惑! 2009-10-27 11:06 raymon
我以前也注意到这个问题了, 想着可能是编程规范上的事。

还专门做了个试验,看不加“implements List”行不行, 当然是没问题的。   回复  更多评论
  

# re: 关于ArrayList类的疑惑! 2009-10-27 11:18 charlie's logic
推荐去stackoverflow.com/ 问一下,看看老外什么解释?  回复  更多评论
  

# re: 关于ArrayList类的疑惑! 2009-10-28 08:06 隔叶黄莺
jdk 源代码许多这样的写法,因为 implements 是没有污染性的,让你看到 ArrayList 能直接意识到那是实现了 List 接口的,而不需要一直回溯去找。  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: