接口定义“能做什么”,是行为契约,强调能力组合(can-do);抽象类定义“是什么+部分怎么做”,是不完整模板,强调类型继承(is-a)与代码复用。

接口是行为的契约,抽象类是不完整的模板。
接口:定义“能做什么”
接口只声明方法签名(Java 8+ 可含 default/static 方法),不关心实现;多个接口可被一个类 implements,解决单继承限制;适合表达能力(如 Runnable、Comparable),强调解耦与多态扩展。
抽象类:定义“是什么 + 部分怎么做”
抽象类可含抽象方法和具体方法,还能有构造器、成员变量、静态代码块;子类 extends 它,只能单继承;适合共享代码逻辑与共同状态(如 AbstractList),体现 is-a 关系和模板设计。
关键区别一句话收口
- 接口重在 能力组合(can-do),抽象类重在 类型继承(is-a + code reuse)
- 变量默认 public static final,方法默认 public abstract(接口);抽象类中成员权限自由,无默认修饰
- Java 8 后接口支持 default 方法是为演进兼容,但 不能有实例字段、不能有构造器、不能 new —— 这仍是抽象类的领地
面试加分点
说清场景选择逻辑:要规范协作、支持多实现 → 选接口;要复用代码、封装共性状态、构建类族骨架 → 选抽象类;现代 JDK(如 Collection 框架)往往是两者结合——接口定义能力,抽象类提供默认实现(如 AbstractMap 实现 Map 接口)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











