一个关于list想不通的问题,java 源码研究发现

wj63558595 2008-12-14 07:15:50
由于想研究下接口技术,就看了下LinkedList的源码,发现了个不解的问题
现在在网吧没工具画图,我就随便说下,大家有条件的参考下j2se的API对照下


LinkedList extends AbstractSequentialList implements List ...

AbstractSequentialList extends AbstractList

AbstractList extends AbstractCollection implements List

问题出现在这了
既然 LinkedList --> AbstractSequentialList --> AbstractList --> List
为什么 LinkedList 又要再去实现 List接口呢?
有点感觉多此一举啊。不理解。。

假设LinkedList 如此定义
public class LinkedList<E>
extends AbstractSequentialList<E>
implements Deque<E>, Cloneable, Serializable /**源码中多了个List*/
我们在使用的时候照样可以
List list = new LinkedList();
为什么sun要重复实现List?

期待高人指点





...全文
204 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
wj63558595 2008-12-17
  • 打赏
  • 举报
回复
谢谢各位了,分都分一点吧!
luoguofeng 2008-12-15
  • 打赏
  • 举报
回复
学习了
RJCHEN1985 2008-12-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bao110908 的回复:]
这么做从语法意义上来说纯属多此一举,但从文档的可读性来看我感觉有点必要。

LinkedList 作为 List 的一个最终实现类,再次重申强调一下 List 就可以在 javadoc 文档中更为清晰地表明
这个类是 List 的实现类,而不用去翻其父类的继承链才知道这是一个 List 的实现类。

这样做以我看来就是重申强调一下,至于其他的也没有什么意义了。
[/Quote]
其实也不尽是这样,大家可以从系统耦合性来考虑:
如果一个系统存在以下的调用
public void getInfos(ArrayList list){
//....
}
如果以后,觉得用LinkedList比用ArrayList有更高的效率,那么我们就要去修改这个接口为
public void getInfos(LinkedList list){
//....
}
一来这样要经常去修改调用的源代码,而且也会造成维护的困难,但如果我们的方法是这样定义的:
public void getInfos(List list){
//...
}
这样我们就可以用传各样的List去调用,也不用修改代码。
“依据接口编程,而不是实现编程”是面向对象的重要原则,不然我们开发的系统,就会遇到维护上的难题
lovingprince 2008-12-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bao110908 的回复:]
这么做从语法意义上来说纯属多此一举,但从文档的可读性来看我感觉有点必要。

LinkedList 作为 List 的一个最终实现类,再次重申强调一下 List 就可以在 javadoc 文档中更为清晰地表明
这个类是 List 的实现类,而不用去翻其父类的继承链才知道这是一个 List 的实现类。

这样做以我看来就是重申强调一下,至于其他的也没有什么意义了。
[/Quote]


支持火龙果的说法,就是这样的。这里也只是一个申明强调的作用。
liuyangccu 2008-12-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bao110908 的回复:]
其实我认为 Java 类库开发人员的目的是为了让使用者更多地关注 List 而不是去关注于
AbstractSequentialList, AbstractList 这些抽象父类。
[/Quote]
也许您是对的,或许是设计模式的需要...
lxmtx___2008 2008-12-14
  • 打赏
  • 举报
回复
顶吧
lqy203 2008-12-14
  • 打赏
  • 举报
回复
规范性问题~~在我们这个学习过程中。代码的规范、逻辑的规范等等都很重要。
richard_2010 2008-12-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bao110908 的回复:]
这么做从语法意义上来说纯属多此一举,但从文档的可读性来看我感觉有点必要。

LinkedList 作为 List 的一个最终实现类,再次重申强调一下 List 就可以在 javadoc 文档中更为清晰地表明
这个类是 List 的实现类,而不用去翻其父类的继承链才知道这是一个 List 的实现类。


这样做以我看来就是重申强调一下,至于其他的也没有什么意义了。
[/Quote]

同意红色标记的部分。好像就如此而已。
ZangXT 2008-12-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bao110908 的回复:]
其实我认为 Java 类库开发人员的目的是为了让使用者更多地关注 List 而不是去关注于
AbstractSequentialList, AbstractList 这些抽象父类。
[/Quote]
这点赞同,感觉AbstractSequentialList等类纯粹关键还是内部需要,并不想提供给用户。
  • 打赏
  • 举报
回复
我觉得类库开发人员的目的已经达到了,如果不是看到你这个帖子,我根本就没注意到还有 AbstractSequentialList 这个类的,呵呵。
  • 打赏
  • 举报
回复
其实我认为 Java 类库开发人员的目的是为了让使用者更多地关注 List 而不是去关注于
AbstractSequentialList, AbstractList 这些抽象父类。
wj63558595 2008-12-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bao110908 的回复:]
这么做从语法意义上来说纯属多此一举,但从文档的可读性来看我感觉有点必要。

LinkedList 作为 List 的一个最终实现类,再次重申强调一下 List 就可以在 javadoc 文档中更为清晰地表明
这个类是 List 的实现类,而不用去翻其父类的继承链才知道这是一个 List 的实现类。

这样做以我看来就是重申强调一下,至于其他的也没有什么意义了。
[/Quote]

我也是这么想的!但是还是有点怪怪的感觉,呵呵。
  • 打赏
  • 举报
回复
这么做从语法意义上来说纯属多此一举,但从文档的可读性来看我感觉有点必要。

LinkedList 作为 List 的一个最终实现类,再次重申强调一下 List 就可以在 javadoc 文档中更为清晰地表明
这个类是 List 的实现类,而不用去翻其父类的继承链才知道这是一个 List 的实现类。

这样做以我看来就是重申强调一下,至于其他的也没有什么意义了。
jaywee 2008-12-14
  • 打赏
  • 举报
回复
接口的意义就是说实现它的类都得有我的这些个方法。 List有很多呀,arrayList, LinkedList等等,这些list都拥有一些共同的方法,因而抽象出了一个接口,以方便未来List的更进一步的扩充,当然,这样做也规范许多。因为规定好了,你要是个List,就得有这些方法。
zh2208 2008-12-14
  • 打赏
  • 举报
回复
不那么追求源码的理解。呵呵。。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧