extends用于类继承,实现代码复用与多态;Java仅支持单继承,子类通过extends声明父类,可继承public/protected成员,需用super调用父类构造,且可重写非private非final方法。

Java 中 extends 关键字用于让一个类继承另一个类,从而复用父类的属性和方法,并支持多态与扩展。它只支持单继承(一个类只能直接继承一个父类),但可通过接口弥补限制。
继承的基本写法与规则
子类通过 extends 声明继承父类,语法为:class 子类名 extends 父类名 { ... }。被继承的父类不能是 final 类,其构造器不会被继承,但子类可通过 super() 显式调用。
- 父类的 public 和 protected 成员可被子类直接访问;默认(包级)成员在同包时可用;private 成员不可见,但可通过 public/protected 方法间接使用
- 子类无法继承父类的构造方法,但必须在自己的构造器中第一行调用 super(...)(可省略,编译器会自动插入无参 super())
- 若父类没有无参构造器,子类必须显式调用带参的 super(参数),否则编译失败
方法重写(Override)与 super 的使用
子类可重写父类的非 private、非 final 方法,实现行为定制。重写时需保持方法签名一致(名称、参数类型与数量、返回类型协变),并可借助 super.方法名() 调用父类版本。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 重写方法的访问权限不能比父类更严格(如父类是 protected,子类不能是 private)
- @Override 注解不是必须,但强烈建议添加,便于编译器检查是否真正重写了父类方法
- 例如:子类重写 toString() 后,仍可通过 super.toString() 获取父类原始字符串表示,再拼接新增字段
继承中的初始化顺序
创建子类对象时,JVM 按固定顺序执行初始化:先父类静态成员 → 父类静态代码块 → 子类静态成员 → 子类静态代码块 → 父类普通成员 → 父类构造器 → 子类普通成员 → 子类构造器。
立即学习“Java免费学习笔记(深入)”;
- 静态内容只在类首次加载时执行一次,与对象创建无关
- 每个构造器隐式或显式调用 super(),确保父类初始化完成后再执行子类逻辑
- 若父类构造器中调用了被子类重写的方法,可能因子类成员尚未初始化而出现 null 或默认值问题(应避免在构造器中调用可被重写的方法)
继承与设计原则的平衡
虽然 extends 支持代码复用,但过度继承易导致紧耦合和脆弱基类问题。优先考虑“组合优于继承”——用 private 字段持有其他类对象,通过委托调用功能。
- 当子类确实是父类的“是一种”关系(如 Dog 是 Animal),且需要共享状态与行为时,适合用 extends
- 若只是“有一个”或“用到”某功能(如 Car 有 Engine),更适合组合 + 接口抽象
- 对已有类扩展,若无法修改源码,可考虑装饰器模式或适配器模式,而非强行继承

















