抽象类(abstract class)和接口(interface)的区别

抽象类和接口都是用于实现抽象和多态的机制,但它们有以下几个主要区别:

  1. 定义方式不同:

    • 抽象类可以定义抽象方法和非抽象方法,也可以包含成员变量。
    • 接口只能定义抽象方法,不能包含成员变量(Java 8之前),也不能有方法实现(Java 8 开始接⼝⽅法可以有默认实现)
  2. 继承方式不同:

    • 一个类只能继承一个抽象类。
    • 一个类可以实现多个接口
  3. 访问修饰符不同:

    • 抽象类中的成员可以使用各种访问修饰符(public、protected、default)。
    • 接口中的成员默认使用 public 修饰,不能使用其他修饰符
  4. 构造函数:

    • 抽象类可以有构造函数。
    • 接口不能有构造函数。
    • 中除了 static final 变量,不能有其他变量, 抽象类中则不 定。
  5. 实现方式不同:

    • 继承抽象类的子类必须实现抽象类中的所有抽象方法,否则该子类也必须声明为抽象类。
    • 实现接口的类必须实现接口中定义的所有方法。
  6. 设计理念不同:

    • 抽象类是对一种事物的抽象,它定义了一种事物的基本特征和行为。
    • 接口更多的是定义一种规范或者契约,它只定义行为,不关心具体实现
    • 从设计层 来说,抽象是对类的抽象,是 种模板设计, 是对 为的抽
      象,是 为的规范。

总的来说,抽象类是对事物的抽象,接口是对行为的抽象。如果你需要对一组相关的类进行抽象描述,并且它们有一些共同的特征和行为,可以使用抽象类。如果你只是希望定义一组规范或者契约,并且不关心具体实现,那么可以使用接口。在实际开发中,根据具体需求来选择使用抽象类还是接口。

1. JDK8 中,接 也可以定义静态 法,可以直接 名调 。实现类和实现是不可以调⽤ 的。如果同时实现两个接 ,接 中定义了 样的默认 ⽅法,则必须重写,不然会报错。
2. jdk9 的接 被允许定义私有 法 。
总结 jdk7~jdk9 Java 中接 的变化:
1. jdk 7 或更早版本中,接 ⼝⾥⾯ 只能有常量变量和抽象 法。这些接 ⼝⽅ 法必须由选择实现接⼝ 的类实现。
2. jdk 8 的时候接 可以有默认 法和静态 法功能。
3. jdk 9 在接 中引 了私有 法和私有静态 法。

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值