• 接口与抽象类的区别


    Java中的接口(Interface)和抽象类(Abstract Class)都是实现抽象化的关键机制,但它们在用途和功能上有着明显的区别。以下是接口和抽象类之间的主要区别:
    在这里插入图片描述

    1. 抽象类(Abstract Class)

      • 含有抽象方法:抽象类可以有抽象方法(没有具体实现的方法)和具体方法(有实现的方法)。
      • 构造函数:抽象类可以有构造函数,用于初始化类的一些成员变量或执行其他初始化操作。
      • 状态维护:抽象类可以有成员变量,因此可以维护状态。
      • 继承:一个类只能继承一个抽象类,因为Java不支持多重继承。
      • 默认方法实现:抽象类允许提供某些方法的默认实现,子类可以直接使用或覆盖这些方法。
      • 访问修饰符:抽象类中的方法可以有不同的访问修饰符(public, protected, private)。
    2. 接口(Interface)

      • 纯抽象方法:接口只能有抽象方法(在Java 8之前),所有方法默认为public abstract类型。
      • 无状态:接口不能有成员变量(除了static和final变量)。
      • 实现:一个类可以实现多个接口,从而部分解决了Java不支持多重继承的限制。
      • 默认方法和静态方法(Java 8及之后):Java 8引入了接口的默认方法和静态方法,允许接口提供方法的实现。
      • 只有public成员:接口中的所有成员都是public的,无法定义private或protected成员。
      • 函数式接口(Java 8及之后):只有一个抽象方法的接口称为函数式接口,可以通过lambda表达式实例化。
    3. 使用场景

      • 抽象类:当几个类之间存在较高的共享代码时,通常使用抽象类。抽象类更适合表达事物的层次结构,用于建模共享特征。
      • 接口:当需要指定一组应该由类实现的方法,但不关心这些方法的具体实现时,使用接口。接口更多地用于表达“能做什么”(功能),而不是“是什么”(性质)。
    4. 总结

      总的来说,抽象类和接口都可以用于实现抽象化,但它们的用途和实现方式不同。抽象类更适合用于对象的共同行为和状态的表示,而接口更适合用于定义对象的功能。随着Java 8引入的默认方法,接口的功能得到了扩展,但仍然保持了与抽象类的基本区别。

  • 相关阅读:
    获取淘宝/天猫购买到商品的订单详情——buyer_order_detail
    Linux 软连接
    docker安装单机nacos、rocketmq、reids、xxl-job、minio、elasticsearch、kibana、gogs、nginx
    MySQL(五)增删改查进阶
    SSM - Springboot - MyBatis-Plus 全栈体系(二十一)
    外汇天眼:Poipex 申请出金超过100天不到账!投资者250万入金打水漂!所有联系方式全不回应
    机械臂模型更换成自己的urdf模块
    YbtOJ「数据结构」第4章 线段树
    PROFINET主站转ETHERCAT协议网关
    TiDB x 安能物流丨打造一栈式物流数据平台
  • 原文地址:https://blog.csdn.net/m0_54187478/article/details/134515610