抽象类(abstract class)和接口(interface)是面向对象编程中实现抽象和多态的两种核心机制,核心区别在于抽象类可包含部分方法实现和成员变量,支持单继承,体现“is-a”关系;而接口仅定义方法签名和常量,支持多实现,体现“like-a”行为规范,两者在语法、设计目的和适用场景上存在本质差异。
一、定义与语法差异
1、定义方式:
抽象类使用 abstract class 关键字定义,可包含抽象方法(无实现)和具体方法(有实现)。
接口使用 interface 关键字定义,所有方法默认抽象(Java 8 后支持默认方法和静态方法),仅能声明常量(public static final)。
2、构造方法:
抽象类可以有构造方法,用于子类初始化。
接口不能有构造方法,因其不涉及状态管理。
二、成员与实现特性
1、方法实现:
抽象类可提供方法的具体实现(非抽象方法),子类仅需实现抽象方法。
接口方法默认无实现(Java 8 前),实现类必须覆盖所有方法;Java 8 后允许默认方法(default)和静态方法(static)。
2、成员变量:
抽象类可定义普通成员变量(任意访问修饰符)和常量。
接口仅能包含常量(隐式 public static final),不能有普通变量。
三、继承与扩展机制
1、继承方式:
抽象类支持单继承(类通过 extends 只能继承一个抽象类)。
接口支持多实现(类通过 implements 可同时实现多个接口)。
2、扩展性影响:
向抽象类添加新方法时,子类自动继承该方法(无需强制重写)。
向接口添加新方法时,所有实现类必须重新实现该方法,否则编译失败。