V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zxc1234
V2EX  ›  程序员

关于抽象类与接口

  •  
  •   zxc1234 · 2020-06-14 17:16:08 +08:00 · 2180 次点击
    这是一个创建于 1627 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我的理解是:

    抽象类是 is-a,接口是 has a,java 可以多继承,但是只能实现一个接口

    一般在项目中如果多个类都有用到共同的方法( A ),并且不同类这个方法( A )的实现不同,我会抽象出一个抽象类

    然后多个子类继承它,子类各自重写这个方法的逻辑(好像这边也可以用接口实现???)

    当这些子类有共同的方法实现( B ),只能用抽象类,因为接口不能有方法实现。

    但是 java8 支持接口方法实现,那么是不是除了类可以多继承,接口只能实现一个这个区别外

    接口可以完全代替抽象类了?

    谢谢~

    第 1 条附言  ·  2020-06-15 07:55:11 +08:00
    单继承多实现,,,,,说错
    11 条回复    2020-06-15 10:09:29 +08:00
    mreasonyang
        1
    mreasonyang  
       2020-06-14 17:24:33 +08:00 via iPhone
    并不能完全替代抽象类啊,比如接口里搞定不了非静态属性,访问控制也没有。而且 default 方法的出现个人觉得更多的考虑是对接口功能的扩展而不是用来替代抽象类的。
    zhazi
        2
    zhazi  
       2020-06-14 17:30:43 +08:00 via Android
    可以多继承吗?只能实现一个接口吗?
    zsdroid
        3
    zsdroid  
       2020-06-14 17:44:54 +08:00
    多继承单实现??我学了个假的 java 。
    Uchiha0bito
        4
    Uchiha0bito  
       2020-06-14 17:45:04 +08:00
    意义上还是有区别 一个强调继承 一个强调拓展功能
    DoodleSit
        5
    DoodleSit  
       2020-06-14 17:59:49 +08:00
    我学的是个假 java 。。。
    namelosw
        6
    namelosw  
       2020-06-14 18:01:46 +08:00 via iPhone
    用了 Scala 你就知道,这俩没区别. Scala 的 trait 该有的功能全有,就差个 constructor 今年 Scala 3 会加上.

    看起来有区别是因为 Java 实现的功能太少. 尝试跟你解释继承组合有区别的人都是基于 Java 实现,多大鞋多大脚自动脑补的...

    除了 Scala 像常见的 Python 也很少区分. 继承组合都可以用多继承流畅表达.
    guangdao
        7
    guangdao  
       2020-06-14 18:29:54 +08:00
    多继承单实现...兄弟学的怕不是 avaj 吧((
    hippieZhou
        8
    hippieZhou  
       2020-06-14 18:55:54 +08:00
    你可以这样理解:抽象类再抽象也是类,所以它规定了继承它的实例是什么,但接口是对行为的抽象,规定了继承它的实例能干什么;所以抽象类描述是什么,接口描述能干什么,:)
    zxc1234
        9
    zxc1234  
    OP
       2020-06-15 07:55:47 +08:00
    @zhazi
    @guangdao
    @zsdroid
    @DoodleSit

    我错了,单继承多实现
    jinzhongyuan
        10
    jinzhongyuan  
       2020-06-15 09:41:28 +08:00
    这个问题 得 从 功能 和 语义 俩方面 来想
    Jafee
        11
    Jafee  
       2020-06-15 10:09:29 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5399 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 07:16 · PVG 15:16 · LAX 23:16 · JFK 02:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.