V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Newyorkcity
V2EX  ›  问与答

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

  •  1
     
  •   Newyorkcity · 2020-03-16 19:52:50 +08:00 · 1209 次点击
    这是一个创建于 1501 天前的主题,其中的信息可能已经有所发展或是发生改变。
    校招实习岗,面试官问,抽象类和接口有什么区别?概念上的?

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

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

    从这个角度来看,我们使用的具体的 java 类库的实现类,比如 ArrayList,HashSet 都是 is a List, is a Set。“集合”,“列表” 这种名词性质的定义,看上去也更像是对概念的抽象而非对行为的抽象。因此才有了题中的想法。
    3 条回复    2020-03-17 09:47:28 +08:00
    blackshow
        1
    blackshow  
       2020-03-16 22:32:53 +08:00   ❤️ 1
    List 不是数据结构,ArrayList 是数组,LinkedList 是双向链表,List 是对数据结构行为的抽象,比如都有 size()、get()、add()等方法
    pursuer
        2
    pursuer  
       2020-03-17 00:05:17 +08:00
    别想那么多,你就试想 Java 不支持多继承的情况下,你要如何表达一个同时有多个特性的情况,比如 Set 的特性是元素不重复,List 是可以用索引访问,那我需要一个元素不重复并支持索引访问的集合那我怎么办,所以经常能看到留个接口 IXxx 再有个默认实现 AbstractXxx 的写法
    a7217107
        3
    a7217107  
       2020-03-17 09:47:27 +08:00   ❤️ 1
    1.实现方式不同,implement 和 extend
    2. java 只允许单继承,抽象类受到很大限制
    3.继承违背了封装原则,子类的实现逻辑必须随着父类更新而改变
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3370 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 12:05 · PVG 20:05 · LAX 05:05 · JFK 08:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.