Java 集合类库的顶层里的 Collection,List,Set 是抽象类的话是否更“正确”一些?

2020-03-16 19:52:50 +08:00
 Newyorkcity
校招实习岗,面试官问,抽象类和接口有什么区别?概念上的?

我当时没答好,结束后就在网上找资料看。大概有了如下的想法:

抽象类是对概念的抽象,在设计或者说投入使用后是 is a。而接口是对行为的抽象,投入使用时更像是 has a 或者说 is like a。

从这个角度来看,我们使用的具体的 java 类库的实现类,比如 ArrayList,HashSet 都是 is a List, is a Set。“集合”,“列表” 这种名词性质的定义,看上去也更像是对概念的抽象而非对行为的抽象。因此才有了题中的想法。
1283 次点击
所在节点    问与答
3 条回复
blackshow
2020-03-16 22:32:53 +08:00
List 不是数据结构,ArrayList 是数组,LinkedList 是双向链表,List 是对数据结构行为的抽象,比如都有 size()、get()、add()等方法
pursuer
2020-03-17 00:05:17 +08:00
别想那么多,你就试想 Java 不支持多继承的情况下,你要如何表达一个同时有多个特性的情况,比如 Set 的特性是元素不重复,List 是可以用索引访问,那我需要一个元素不重复并支持索引访问的集合那我怎么办,所以经常能看到留个接口 IXxx 再有个默认实现 AbstractXxx 的写法
a7217107
2020-03-17 09:47:27 +08:00
1.实现方式不同,implement 和 extend
2. java 只允许单继承,抽象类受到很大限制
3.继承违背了封装原则,子类的实现逻辑必须随着父类更新而改变

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/653367

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX