当前位置: 首页 > news >正文

【后端】java 抽象类和接口的介绍和区别

文章目录

      • 一、抽象类(Abstract Class)
      • 二、接口(Interface)
      • 三、核心区别总结
      • 四、使用场景对比
      • 五、从设计思想理解
      • 最佳实践

在Java中,抽象类(Abstract Class)和接口(Interface)都是实现抽象和多态的核心机制,但它们在设计目的和使用场景上有显著区别。以下是详细解释及对比:


一、抽象类(Abstract Class)

  1. 定义

    • 使用 abstract 关键字修饰,不能实例化(只能被继承)。
    • 可以包含普通方法、抽象方法、成员变量、构造方法等。
    • 抽象方法使用 abstract 声明,无方法体(需子类实现)。
  2. 核心特点

    public abstract class Animal {private String name; // 成员变量public Animal(String name) { this.name = name; // 构造方法}public abstract void eat(); // 抽象方法public void sleep() { // 普通方法System.out.println(name + " is sleeping.");}
    }
    
  3. 关键用途

    • 代码复用:通过继承共享基类的属性和方法(如 sleep() 方法)。
    • 强制约束:要求子类必须实现抽象方法(如 eat())。
    • 模板模式:定义算法框架,子类填充细节。
  4. 继承规则

    • 单继承限制:一个子类只能继承一个抽象类。

二、接口(Interface)

  1. 定义

    • Java 8 前:只能包含抽象方法常量public static final)。
    • Java 8+:支持 default 方法、static 方法、private 方法。
    • Java 9+:支持 private static 方法。
  2. 核心特点

    public interface Flyable {int MAX_HEIGHT = 10000; // 常量(默认为 public static final)void fly(); // 抽象方法(默认为 public abstract)// Java 8+ 默认方法(有实现)default void glide() {System.out.println("Gliding...");}// Java 8+ 静态方法static boolean isFlyable(Object obj) {return obj instanceof Flyable;}
    }
    
  3. 关键用途

    • 行为契约:定义对象能做什么(如 Flyable 表示“可飞行”)。
    • 解耦设计:实现类只需关注方法逻辑,不绑定继承关系。
    • 多继承支持:一个类可实现多个接口(解决单继承局限)。
  4. 实现规则

    • 类使用 implements 实现接口(可同时实现多个)。

三、核心区别总结

特性抽象类接口
方法实现可包含普通方法和抽象方法Java 8 前只能有抽象方法;之后支持默认/静态方法
成员变量可以是普通变量只能是常量(public static final
构造方法有构造方法(供子类调用)无构造方法
继承/实现单继承(子类 extends 一个抽象类)多继承(类 implements 多个接口)
设计目的代码复用 + 扩展约束(is-a 关系)行为抽象(has-a/can-do 能力)
访问修饰符抽象方法可为 protected方法默认为 public(不可修改)
静态/私有方法支持Java 8+ 支持静态/默认方法;9+ 支持私有方法

四、使用场景对比

  • 用抽象类当
    多个子类有共享逻辑或状态(如动物基类的 name 属性和 sleep() 方法)。

  • 用接口当
    需定义跨类别的行为(如 FlyableRunnable),或需要多继承时。

实际应用

  • InputStream 是抽象类(提供通用读取方法,子类如 FileInputStream)。
  • List 是接口(ArrayListLinkedList 提供不同实现)。

五、从设计思想理解

  • 抽象类:描述对象的本质(“是什么”),如 Bird extends Animal
  • 接口:描述对象的能力(“能做什么”),如 Bird implements Flyable

最佳实践

优先使用接口(灵活解耦),当需要复用代码或共享状态时再使用抽象类。
常见组合:接口定义行为,抽象类提供部分实现(如 AbstractList 实现 List 接口)。

通过理解二者差异,可以更精准地选择工具,构建高扩展性的代码结构。

http://www.dtcms.com/a/317501.html

相关文章:

  • PromptPilot 与豆包新模型:从图片到视频,解锁 AI 新玩法
  • 8.6笔记
  • JSON、JSONObject、JSONArray详细介绍及其应用方式
  • Day 33: 动手实现一个简单的 MLP
  • 如何快速掌握大数据技术?大四学生用Spark和Python构建直肠癌数据分析与可视化系统
  • 【python中级】关于Flask服务在同一系统里如何只被运行一次
  • DDoS 防护的未来趋势:AI 如何重塑安全行业?
  • 【历史人物】【范仲淹】简历与生平
  • 应急响应知识总结
  • 主流linux版本分类与说明
  • mysql死锁的常用解决办法
  • 【Linux系统】进程间通信:命名管道
  • Java SPI 机制初探|得物技术
  • linux下的串口通信原理及编程实例
  • 二、Envoy静态配置
  • 时序预测(论文解读)-金融领域的滞后性
  • 客流特征识别准确率提升 29%:陌讯多模态融合算法在零售场景的实战解析
  • 【渲染流水线】[应用阶段]-[遮挡剔除]以UnityURP为例
  • NY112NY117美光固态闪存NY119NY123
  • 【Linux】重生之从零开始学习运维之主从MGR高可用
  • 在docker容器里面使用docker
  • 生成模型实战 | Transformer详解与实现
  • SQL的条件查询
  • 【Mysql】重生之从零开始学习运维之proxysql读写分离
  • docker相关操作记录
  • DSP2837X CLA开发实战教程
  • 解决Node.js v12在Apple Silicon(M1/M2)上的安装问题
  • 微软开发的Unix系统——Xenix测评
  • 运维新纪元:告别Excel手工规划,实现“零误差”决策
  • 无人机航拍数据集|第5期 无人机高压输电线铁塔鸟巢目标检测YOLO数据集601张yolov11/yolov8/yolov5可训练