接口和抽象类有什么区别?
Java 基础面试题发布于
一、核心区别
| 维度 | 抽象类 | 接口 |
|---|---|---|
| 关键字 | abstract class | interface |
| 继承 | 单继承 | 多实现 |
| 构造方法 | 有 | 无 |
| 成员变量 | 任意 | 仅 public static final |
| 方法实现 | 可有抽象/具体方法 | 默认方法、静态方法(JDK 8+) |
| 设计目的 | "is-a" 共性抽取 | "can-do" 行为规范 |
二、使用选择
- 多个类有共同属性和状态 → 抽象类(如 Animal)。
- 定义行为契约、支持多态组合 → 接口(如 Runnable、Comparable)。
- 需要多重继承 → 接口。
三、JDK 8 之后
接口支持 default 方法(有默认实现)和 static 方法,缩小了与抽象类的差距,但接口仍不能持有实例状态。