private字段不被继承,子类声明同名字段是完全独立的新变量,非隐藏也非重写;因private对子类不可见,不存在遮蔽前提,二者仅命名巧合、物理隔离、语义无关。

这既不是方法重写,也不是严格意义上的字段隐藏——而是**完全独立的两个字段**。
private 字段不会被继承,更谈不上被隐藏
父类中声明为 private 的成员变量,子类根本不可见,也不参与继承关系。子类里写一个同名字段,只是恰好名字一样,JVM 会把它当作一个全新的、和父类毫无关联的变量来处理。
- 父类 private 字段只存在于父类对象内存布局中,子类无法通过
super.xxx访问 - 子类同名字段在自己的类结构里单独分配空间,与父类字段物理隔离
- 两者类型可以不同、修饰符可以不同,甚至一个存在一个不存在,都不影响编译
为什么不能叫“字段隐藏”?
字段隐藏(Field Hiding)的前提是:子类能“看到”父类的字段(比如父类是 protected 或包级访问),然后用同名字段将其遮蔽。而 private 字段对子类不可见,连“遮”的对象都没有,自然不构成隐藏。
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 隐藏只发生在可访问范围内(如 public/protected/package-private)
- private 是访问控制的边界,跨过这个边界就不是“遮”,而是“重开一间房”
实际编码中该怎么看待这种同名?
它只是一个容易引发误解的命名巧合,没有语义关联,也不触发任何特殊机制。
- 建议避免同名:哪怕父类字段是 private,子类也尽量换名,防止阅读时误以为有逻辑联系
- IDE 通常不会警告,但 Checkstyle 或 SonarQube 可配置规则检测这类易混淆命名
- 若真需要表达“延续父类语义”,应统一通过 getter/setter 抽象,而不是靠字段名暗示
本质上,这是两个平行世界里的同名变量,彼此不认识,也不打招呼。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










