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

抽象类是“模板”,接口是“契约”——深度对比 Java 两大抽象机制

🧭 抽象类 vs 接口:本质区别全面对比


🔍 一、定义与核心思想

项目抽象类(abstract class接口(interface
定义目标提供一组具有共性行为的类的父类定义行为规范/能力约定,关注“能做什么”
抽象程度部分抽象,可包含非抽象方法完全抽象(Java 8 之前),只包含方法签名
设计哲学是一种“is-a”关系是一种“can-do”关系
举例狗是动物(Dog is-a Animal)飞行能力(Flyable:能飞的)

🧱 二、语法与结构对比

特性抽象类接口
是否可实例化❌ 不可实例化❌ 不可实例化
是否支持构造方法✅ 支持❌ 不支持
是否可包含成员变量✅ 可包含成员变量(非 final 也可)✅ 但只能是 public static final 常量
是否可包含方法实现✅ 可包含普通方法✅ Java 8+ 可包含 default/static 方法
默认修饰符protected 可用所有方法默认 public abstract
多继承支持❌ 不支持类多继承✅ 支持多接口实现
子类继承方式使用 extends使用 implements
是否可以结合使用✅ 一个类可同时继承抽象类并实现接口✅ 多接口组合很常见

📦 三、代码示例对比

🔹 抽象类使用示例:
abstract class Animal {String name;Animal(String name) {this.name = name;}void breathe() {System.out.println(name + " 在呼吸");}abstract void makeSound(); // 抽象方法
}class Dog extends Animal {Dog(String name) {super(name);}void makeSound() {System.out.println(name + " 在汪汪叫");}
}
🔸 接口使用示例:
interface Flyable {void fly(); // 抽象方法(默认 public abstract)
}class Bird implements Flyable {public void fly() {System.out.println("鸟在飞翔");}
}

🧠 四、面试实战总结:选择使用谁?

使用场景推荐使用
存在共性功能和状态的类群抽象类(可提供基础实现)
为多个类提供统一能力/功能扩展接口(能力型规范)
需要支持多继承接口(Java 类不支持多继承)
需要定义一些常量接口(全部 public static final

📊 五、Mermaid 对比图(发散结构)

在这里插入图片描述


🧩 六、总结一句话:

Java 中抽象类是为具有“共性行为和属性”的类设计的,适用于继承树结构;而接口更注重“能力的约定”,适合多个无关类间提供统一行为,且支持多继承,是 Java 架构解耦的重要利器。

http://www.xdnf.cn/news/48205.html

相关文章:

  • NLP 梳理03 — 停用词删除和规范化
  • git reset和git revert的区别
  • DQN在Gym的MountainCar环境的实现
  • SpringCloud实战
  • 软考复习——知识点软件开发
  • 提示词设计:动态提示词 标准提示词
  • 深入理解 Java 中的 synchronized 关键字
  • 【JavaWeb后端开发02】SpringBootWeb + Https协议
  • OpenCV 对图像进行阈值处理 cv2.threshold
  • 基于 pnpm + Monorepo + Turbo + 无界微前端 + Vite 的企业级前端工程实践
  • Linux教程-Shell编程系列二
  • 一招破敌,掌控 React 渲染术:createRoot 与 root.render
  • 第一章:MySQL视图基础
  • webgl入门实例-矩阵在图形学中的作用
  • Vivado中Tri_mode_ethernet_mac的时序约束、分析、调整——(五)调试注意的问题
  • Java表达式2.0
  • Java 网络编程性能优化:高吞吐量的实现方法
  • 【Tauri2】027——plugin(三)——fs
  • 出差像是旅游?
  • 2025-04-20 李沐深度学习4 —— 自动求导
  • 中级软件设计师 - 知识点(附真题)目录大全
  • Matplotlib的应用
  • springboot起步依赖的原理是什么?
  • “小坝” 策略:始发站 buffer 控制与优化
  • 专题讨论:BST树上的添加与删除
  • mysql的5.7版本与8.0版本的差异与兼容性
  • Flink介绍——实时计算核心论文之MillWheel论文详解
  • 计算机视觉7——齐次坐标与相机内外参
  • transformer注意力机制
  • 集合框架拓展--stream流的使用