Java中如何正确调用其他类的变量?
- 后端开发
- 2025-05-29
- 5
在Java中调用其他类的变量是开发中的常见需求,但需要根据变量的访问权限和场景选择合适的方法,以下从变量作用域、访问权限、调用方式三个维度展开详细说明,并附代码示例。
变量作用域与访问权限
Java通过访问修饰符(public、protected、private、默认)控制类成员的可见性:
- public:任何类均可访问。
- protected:同包或子类可访问。
- private:仅本类可访问。
- 默认(无修饰符):同包可访问。
示例1:直接访问public变量
// 定义类A public class ClassA { public int publicVar = 10; } // 在类B中调用ClassA的public变量 public class ClassB { public static void main(String[] args) { ClassA objA = new ClassA(); System.out.println(objA.publicVar); // 输出: 10 } }
通过方法调用私有变量
若变量为private,需通过类的Getter/Setter方法访问(符合封装原则)。

示例2:使用Getter方法
// 定义类C(含私有变量) public class ClassC { private int privateVar = 20; // Getter方法 public int getPrivateVar() { return privateVar; } // Setter方法(可选) public void setPrivateVar(int value) { this.privateVar = value; } } // 调用ClassC的私有变量 public class ClassD { public static void main(String[] args) { ClassC objC = new ClassC(); int value = objC.getPrivateVar(); System.out.println(value); // 输出: 20 } }
静态变量的调用
若变量为static,可直接通过类名访问,无需实例化对象。

示例3:调用静态变量
public class ClassE { public static int staticVar = 30; } public class ClassF { public static void main(String[] args) { System.out.println(ClassE.staticVar); // 输出: 30 } }
继承关系中的变量调用
子类可通过super关键字访问父类的非私有变量(若父类变量为protected或public)。
示例4:子类访问父类变量
// 父类 public class ParentClass { protected int parentVar = 40; } // 子类 public class ChildClass extends ParentClass { public void printParentVar() { System.out.println(super.parentVar); // 输出: 40 } }
反射机制(高级用法)
通过反射可突破访问权限限制,但不推荐常规使用(破坏封装性)。
示例5:反射访问私有变量
import java.lang.reflect.Field; public class ReflectionExample { public static void main(String[] args) throws Exception { ClassC obj = new ClassC(); Field field = ClassC.class.getDeclaredField("privateVar"); field.setAccessible(true); // 强制访问私有变量 int value = (int) field.get(obj); System.out.println(value); // 输出: 20 } }
注意事项
- 封装原则:优先通过Getter/Setter方法访问变量,避免直接暴露类内部数据。
- 作用域限制:根据需求选择最小访问权限(如优先用private)。
- 反射风险:反射可能导致性能下降和代码维护困难,慎用。
| 场景 | 方法 | 适用性 |
|---|---|---|
| 公有变量 | 直接访问 | 简单、快速 |
| 私有变量 | Getter/Setter | 安全、推荐 |
| 静态变量 | 类名.变量名 | 工具类场景 |
| 继承场景 | super关键字 | 父子类关系 |
| 特殊需求 | 反射机制 | 高风险场景 |
引用说明参考Oracle官方Java文档(https://docs.oracle.com/javase/tutorial/)及《Effective Java》第三版(Joshua Bloch著),确保技术准确性。
