• 接口与抽象类的区别


    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引入的默认方法,接口的功能得到了扩展,但仍然保持了与抽象类的基本区别。

  • 相关阅读:
    linux系统安装步骤
    flask框架+pygal+sqlit3搭建图形化业务数据分析平台
    提高篇(三):交互设计与用户输入:打造更具互动性的Processing作品
    wait和sleep是否会触发锁的释放以及 CPU 资源的释放?
    ESLint自动修复代码规范错误
    详细图文手把手教你阿里云注册域名如何托管到CloudFlare DNS服务
    华为数通方向HCIP-DataCom H12-821题库(单选题:361-380)
    【MATLAB】基本数学操作
    利用docker搭建不同版本fastjson漏洞环境【保姆级教学】
    初探元宇宙存储,数据存储市场下一个爆点?
  • 原文地址:https://blog.csdn.net/m0_54187478/article/details/134515610