备忘录四
前言 简单记录一下车载开发中修改的部分记录,记录于此,方便自...
java面试中经常被问抽象类(Abstract class)和接口(Interface)有啥区别?
下面简单的记录一下,方便自己查阅和回顾。
抽象类是对同一类事物本质特征的抽象,它回答的是“它是什么(is-a)”的问题。抽象类不仅定义了必须遵循的规范,还包含了已经实现的公共逻辑,主打代码复用与模板约束。
抽象类是事物的共性模板
特点:
包含抽象方法、普通方法、成员变量、构造方法
子类必须实现所有抽象方法(除非子类也是抽象类)
接口是对事物行为能力的抽象,它回答的是“它能做什么(can-do)”的问题。接口不关心实现类的本质归属,只定义统一的行为规范,主打业务解耦与功能拓展。
接口是行为的标准化契约
特点
一个类可实现多个接口
| 抽象类 (Abstract Class) | 接口 (Interface) |
|---|---|
| 聚焦“是什么”(is-a 关系),提取共性模板 | 聚焦“能做什么”(can-do 关系),定义行为契约 |
| 支持实例变量、构造方法、任意权限的方法 | 仅支持常量(Java 8+ 支持默认/静态方法),无构造器 |
单继承(extends) | 多实现(implements) |
| 新增抽象方法需修改所有子类,耦合度偏高 | 新增默认方法无需修改现有实现类,兼容性好 |