静态变量属于类本身,父类与子类共享同一份内存空间,修改任一端的值都会同步影响另一端;但若子类重声明同名静态变量,则为遮蔽而非覆盖,二者互不影响。

父类的静态变量被子类修改后,父类中获取到的值会同步变化,因为静态变量属于类本身,不是某个实例,所有类(包括父类和子类)共享同一份静态变量内存空间。
静态变量是类级别的共享资源
Java 中 static 变量只有一份,存放在方法区(或元空间),它不属于任何对象实例,也不因继承关系而复制。无论通过父类名、子类名还是对象引用去访问,只要指向同一个静态字段,操作的都是同一个内存地址。
- 子类直接使用
ParentClass.staticField = newValue修改,父类后续读取ParentClass.staticField就是新值 - 子类用
ChildClass.staticField = newValue修改,效果完全一样——本质仍是修改父类声明的那个 static 字段 - 即使子类里“重写”了同名 static 字段(即在子类中又声明一个同名 static 变量),那只是遮蔽(hiding),不是覆盖(overriding);此时父类的静态变量依然独立存在,未被改变
注意:子类定义同名 static 字段会遮蔽父类字段
如果子类自己也声明了一个与父类同名的 static 变量(类型可相同也可不同),那么这个变量和父类的无关,是独立的两份数据。这时:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
ParentClass.field访问的是父类自己的静态变量 -
ChildClass.field访问的是子类自己定义的静态变量 - 二者互不影响,改一个不会影响另一个
这种情况下看似“子类修改了父类静态变量”,实际只是访问了子类自己的字段,父类原始值保持不变。
验证方式:用代码观察行为
可以写个简单例子确认:
class Parent { static int x = 10; }
class Child extends Parent { }
// 修改方式一:通过子类名赋值
Child.x = 20;
System.out.println(Parent.x); // 输出 20 → 共享变量被改了
// 修改方式二:子类自己再定义 static x
class Child2 extends Parent { static int x = 999; }
Child2.x = 888;
System.out.println(Parent.x); // 还是 10 → 父类字段没变
System.out.println(Child2.x); // 输出 888 → 改的是子类自己的 x
关键结论
静态变量的可见性和共享性由声明位置决定,不是由访问路径决定。只要没有在子类中重新声明同名 static 字段,那么所有对它的修改都作用于同一个存储单元。父类和子类看到的始终是同一个值。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










