抽象类回答“它是什么”,强调血缘与共性;接口回答“它能干什么”,强调能力契约;选型看是否需复用状态流程(抽象类)或跨域统一行为(接口),二者可组合使用。

面试冲刺阶段,记接口和抽象类,别堆八股文。抓三个锚点:定位、语法、选型逻辑,5分钟就能理清。
一、一句话定性:它到底在回答什么问题
这是所有判断的起点:
- 抽象类回答:“它是什么?”——强调血缘与共性,比如“微信支付”“支付宝支付”都是“聚合支付渠道”,共享初始化、签名、验签等骨架流程;
- 接口回答:“它能干什么?”——强调能力契约,比如“可退款”“可查单”“可通知”,这些能力可能跨支付、订单、物流等多个不相关的模块。
二、关键语法差异(只记最易错的3条)
不用背表格,盯住编译器报错时真正卡你的地方:
- 构造方法:抽象类可以有(子类 new 时隐式调用),接口绝对没有——写 interface XXX() {} 直接报错;
- 字段:抽象类里可以写 private String key;,接口里所有字段自动是 public static final,写 String key = "abc"; 就够了,加修饰符反而冗余;
- 继承数量:一个类 只能 extends 一个抽象类,但可以 implements 多个接口(比如同时实现 Payable、Refundable、Notifiable)。
三、实战选型口诀(遇到题直接套)
看到需求描述,按顺序问自己两句话:
- “这些类有没有共同的状态或流程要复用?” → 是 → 优先考虑抽象类;
- “是否需要让完全无关的类(比如 User、Order、Log)都具备同一行为?” → 是 → 必须用接口;
- 如果两个答案都是“是”,那就组合用:抽象类负责内部复用,接口负责对外能力声明(例如:抽象类 AbstractPayment + 接口 AsyncCallback)。
四、高频陷阱提醒(面试官最爱挖)
这几个点答错,基本等于没理解本质:
- Java 8 的 default 方法不是为了“让接口变抽象类”,而是为**向后兼容**——给已有接口加新方法,老实现类不改代码也能编译通过;
- 接口不能有构造方法,所以 不能保存状态(如商户密钥、线程上下文);想存,得靠实现类自己处理;
- 当一个类既继承抽象类又实现接口,且两者有同名方法,优先走抽象类里的实现(就近原则),不是覆盖也不是冲突。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











