接口和抽象类有什么区别?

Java 基础面试题发布于

一、核心区别

维度 抽象类 接口
关键字 abstract class interface
继承 单继承 多实现
构造方法 有 无
成员变量 任意 仅 public static final
方法实现 可有抽象/具体方法 默认方法、静态方法(JDK 8+)
设计目的 "is-a" 共性抽取 "can-do" 行为规范

二、使用选择

  • 多个类有共同属性和状态 → 抽象类(如 Animal)。
  • 定义行为契约、支持多态组合 → 接口(如 Runnable、Comparable)。
  • 需要多重继承 → 接口。

三、JDK 8 之后

接口支持 default 方法(有默认实现)和 static 方法,缩小了与抽象类的差距,但接口仍不能持有实例状态。