当前位置: 首页 > 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.lryc.cn/news/612234.html

相关文章:

  • Unity打造塔科夫式网格背包系统
  • Enhancing Long Video Question Answering with Scene-Localized Frame Grouping
  • 根据经纬度(从nc格式环境数据文件中)提取环境因子
  • 基于Hadoop的股票大数据分析可视化及多模型的股票预测研究与实现
  • 2025年测绘程序设计模拟赛一--地形图图幅编号及图廓点经纬度计算
  • DAY32打卡
  • golang的map
  • 哈尔滨云前沿-关于物理服务器
  • 关于 idea 里 properties 文件的中文乱码问题
  • get请求中文字符参数乱码问题
  • 软件定义汽车 --- 电子电气架构的驱动
  • Vue Vant使用
  • AI大语言模型如何重塑软件开发与测试流程
  • 初识神经网络01——认识PyTorch
  • 需求EAV模型的优化与思考
  • PCL 平面特征点提取
  • 一、Istio基础学习
  • Next.js 服务器组件与客户端组件:区别解析
  • [FOC电机控制]-高速刹车机制
  • 滑动窗口相关题目
  • C++ 运算符重载:避免隐式类型转换的艺术
  • 利用DeepSeek编写go语言按行排序程序
  • DAY 37 早停策略和模型权重的保存
  • 线程互斥与同步
  • 周鸿祎:AI 时代安全智能体,能否重塑数字安全格局?
  • 一个AI硬件项目经理的PMP实战笔记
  • OpenObserve非sql模式 query editor 中 xx like ‘|’报错如何处理
  • 芯片封装(DIP、SOP、QFP、QFN、BGA、LGA、PGA)
  • 从零开始的云计算生活——第三十八天,避坑落井,Docker容器模块
  • Spring Data MongoDB 教程:用 @Query 快速实现字段查询