说清抽象类如何为 JDK 1.8 默认方法铺垫
概念定义:在 JDK 1.8 之前,接口只能声明抽象方法,不能有实现,因此用抽象类提供非抽象方法作为默认逻辑。解决的问题:避免子类重复实现公共代码。核心机制:抽象类的非抽象方法可被子类直接继承调用。适用边界:单继承限制,使用成本较高。覆盖章节:一、抽象类回顾(作为铺垫)。
诊断题
- 在 JDK 1.8 之前,为什么需要抽象类来提供共享逻辑?
- 抽象类与接口在继承机制上有什么关键区别,这如何影响设计选择?
- 继续追问 说清抽象类如何为 JDK 1.8 默认方法铺垫 时,哪些边界、误区或应用判断最容易答错? 回答时请结合原文机制、适用边界、易混点和工程取舍。
答案骨架
我能说清:
- JDK 1.8 前接口无方法实现,抽象类用非抽象方法提供默认逻辑
- 抽象类是单继承,接口可多实现
- 抽象类解决了代码复用但限制了灵活性
- 这为引入接口默认方法提供了动机
- 易混点是抽象类可包含状态,而接口更侧重契约。
边界追问
- 如果抽象类有抽象方法,子类必须全部实现吗?
- 在 JDK 8 之后,抽象类在哪些场景下仍然比接口更合适?
- 如果把 说清抽象类如何为 JDK 1.8 默认方法铺垫 落到真实项目,应该继续追问哪些输入条件、失败前提或成本取舍? 回答时请结合原文机制、适用边界、易混点和工程取舍。
边界答案
- 子类必须实现所有抽象方法,除非子类也是抽象类;
- 抽象类适用于需要定义状态或共享复杂行为的场景,接口更适用于定义契约和默认行为。 判断原则是先确认原文对象、输入条件和适用边界是否成立;前提成立时按该机制处理,前提不成立时说明例外、风险和替代方案。
记忆锚点
先抽象类铺垫单继承限制,后默认方法登场解耦。
衍生拓展
- 复习重点:抽象类与接口的对比
- 易混点:抽象类是否可以有构造函数
- 面试延伸:Java 8 引入接口默认方法的原因
- 实践扩展:在遗留代码中识别抽象类使用
- 复习重点:回到原文复核 说清抽象类如何为 JDK 1.8 默认方法铺垫 的证据句、机制链路和适用边界
- 易混点:对比相邻章节或相似概念,找出 说清抽象类如何为 JDK 1.8 默认方法铺垫 最容易误用的前提
- 面试延伸:准备一个机制问题、一个边界问题和一个工程取舍问题
- 实践扩展:补一个真实落地场景,并写出失败时的排查入口
落地场景
例如,在数学计算接口中,抽象类提供 sqrt 默认方法:
1abstract class Formula {
2 abstract double calculate(int a);
3 double sqrt(int a) {
4 return Math.sqrt(a);
5 }
6}