Java继承中属性共享的本质是访问权限传递与内存共享:非私有实例字段被子类访问但归属父类对象,static字段属类级别单例共享,private字段需通过getter/setter间接访问。

Java 中继承实现类属性的共享,核心在于“非私有成员的可见性传递”,而非复制或镜像。子类获得的是对父类非 private 字段的访问权限,实际存储仍归属父类结构;真正共享的,是字段的定义与内存位置(尤其对 static 成员),而非独立副本。
非静态属性:继承即访问权限的延伸
父类中声明为 public、protected 或包级(default)的实例字段,会被子类“看到”并可直接使用。这些字段属于每个对象实例,子类对象创建时,其内存布局中会包含父类定义的这部分字段空间。
- 子类构造器必须通过 super() 调用父类构造器,确保父类字段被正确初始化
- 子类可直接读写继承来的字段(如 name、age),无需重新声明
- 若子类声明同名字段(如 protected String name;),则构成隐藏——子类中 this.name 指向自己的字段,super.name 才能访问父类版本
静态属性:本质是类级别的共享,不是继承
静态字段属于类本身,加载时存于方法区,只有一份。子类“能用”父类静态字段,是因为 JVM 允许通过子类名访问父类的静态成员,但底层指向同一内存地址。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 推荐始终用 Parent.fieldName 显式调用,避免误以为该字段属于子类
- 若子类定义同名 static 字段,则是全新变量,与父类字段物理隔离,互不影响
- 初始化顺序严格:父类静态块和字段先执行,子类后执行,因此子类静态代码中可安全引用已初始化的父类静态状态
私有属性:不可直接继承,但可通过受控方式间接共享
父类的 private 字段不会被子类继承,子类无法通过字段名或 super.field 访问。但这不意味着它不存在于子类对象中——JVM 在实例化子类对象时,仍会为其分配父类 private 字段的空间。
立即学习“Java免费学习笔记(深入)”;
- 子类只能通过父类提供的 public/protected getter/setter 方法操作这些字段
- 反射可绕过访问限制,但破坏封装,仅限框架或调试场景
- 设计上应优先将需复用的状态暴露为 protected 或提供公共接口,而非依赖私有字段直连
共享的边界与注意事项
属性共享不是无条件的复制,而是基于访问控制与内存模型的协作机制。真正决定“能否用、怎么用、是否共用一份”的,是修饰符、作用域和 JVM 类加载行为。
- 子类不能继承父类的 private 或 final 实例字段(final 修饰符限制的是赋值,不影响继承)
- 不同类加载器加载的相同类,其静态字段完全独立,这是模块隔离的基础
- 过度依赖继承共享属性易导致紧耦合;当关系更偏向“has-a”而非“is-a”时,组合往往比继承更灵活、更安全

















