java继承机制通过extends实现单继承,支持字段方法复用与重写,需遵循访问权限、构造器调用、@override注解等规则,避免空指针、hashcode不匹配等陷阱。

Java继承机制是面向对象编程的核心特性之一,它让子类能复用父类的字段和方法,同时支持按需重写(Override)以实现多态行为。关键在于理解继承关系的建立方式、方法重写的规则和super关键字的正确使用。
定义父子类并建立继承关系
使用extends关键字声明子类继承父类。父类中被public或protected修饰的非私有成员可被子类直接访问;private成员不可继承,但可通过公共getter/setter间接使用。
- 父类通常设计为通用抽象模型(如Animal),子类体现具体类型(如Dog、Cat)
- 子类构造器中若未显式调用super(),编译器会自动插入无参父类构造器调用;若父类无无参构造器,必须手动写super(…)
- 一个类只能有一个直接父类(单继承),但可通过接口实现多重行为扩展
正确重写父类方法实现多态
重写不是重载:它要求子类方法与父类被重写方法具有相同签名(方法名、参数列表、返回类型协变)且访问权限不能更严格。建议始终添加@Override注解,由编译器检查是否真正构成重写。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 重写后,通过父类引用指向子类对象调用该方法时,执行的是子类版本(动态绑定)
- 若需在子类方法中调用父类同名方法,用super.methodName(),例如super.toString()
- static方法、final方法、private方法不能被重写;重写只针对实例方法
利用继承提升代码复用性
把多个子类共有的属性(如name、age)和基础行为(如eat()、sleep())提取到父类中,避免重复编码。子类只需专注差异化逻辑。
- 例如Vehicle类定义start()和stop(),子类Car重写start()加入“启动引擎”,Bicycle则重写为“蹬踏起步”
- 配合protected修饰符合理暴露内部状态,既支持子类访问,又限制外部直接修改
- 避免过度继承:若子类与父类之间不存在“is-a”关系(如“管理员不是用户”),应优先考虑组合而非继承
常见陷阱与规避方式
继承用不好反而增加耦合和维护成本。几个高频问题需警惕:
- 构造器中调用可重写方法:父类构造器执行期间子类字段尚未初始化,可能导致空指针或错误值——应将此类逻辑推迟到构造完成后再触发
- 重写equals()却未重写hashCode():违反契约,影响HashMap等集合正常工作——二者必须同步重写
- 误将重写写成重载:参数类型或数量不同即为重载,不会覆盖父类行为——务必核对方法签名并加@Override注解
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










