Newyorkcity
V2EX  ›  问与答

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

  •  1
     
  •   Newyorkcity · Mar 16, 2020 · 1725 views
    This topic created in 2290 days ago, the information mentioned may be changed or developed.
    校招实习岗,面试官问,抽象类和接口有什么区别?概念上的?

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

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

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