外观
一句话答案
接口定义能力规范支持多实现,抽象类定义模板只能单继承;JDK8 后接口可有 default 方法,两者边界模糊。
核心要点
| 维度 | 接口 | 抽象类 |
|---|---|---|
| 继承 | 多实现 | 单继承 |
| 方法 | 抽象+default | 抽象+具体 |
| 变量 | 只能static final | 可以有实例变量 |
| 构造器 | 无 | 有 |
追问与易错
追问方向:
- JDK8 的 default 方法带来了什么问题?(菱形继承冲突需手动解决)
- 什么时候用接口什么时候用抽象类?(能力用接口,模板用抽象类)
- 函数式接口是什么?(只有一个抽象方法,可用 Lambda)
易错点:
- ❌ "接口不能有实现"——JDK8+ 可以有 default/static 方法
- ❌ "抽象类必须有抽象方法"——不是必须的,可以全是具体方法
💡 记忆锚点
接口是资格证(能做什么,可以考多个),抽象类是家族血统(是什么,只能有一个爹)。JDK8后接口也能有default方法了,但接口没有实例变量和构造器——资格证不管你家有多少财产。