示例1:使用getter和setter方法访问私有字段
class Test {
// private variables
private int age;
private String name;
// initialize age
public void setAge(int age) {
this.age = age;
}
// initialize name
public void setName(String name) {
this.name = name;
}
// access age
public int getAge() {
return this.age;
}
// access name
public String getName() {
return this.name;
}
}
class Main {
public static void main(String[] args) {
// create an object of Test
Test test = new Test();
// set value of private variables
test.setAge(24);
test.setName("Programiz");
// get value of private variables
System.out.println("Age: " + test.getAge());
System.out.println("Name: " + test.getName());
}
}
输出
Age: 24
Name: Programiz
在上面的示例中,我们有名为age和name的私有变量。在这里,我们试图从其他名为Main的类访问私有变量。
我们已经使用getter和setter方法访问私有变量。这里,
- setter方法
setAge()
和setName()
初始化私有变量 - getter方法
getAge()
和getName()
返回私有变量的值
示例2:使用反射访问私有字段和方法
import java.lang.reflect.*;
class Test {
// private variables
private String name;
// private method
private void display() {
System.out.println("The name is " + name);
}
}
class Main {
public static void main(String[] args) {
try {
// create an object of Test
Test test = new Test();
// create an object of the class named Class
Class obj = test.getClass();
// access the private variable
Field field = obj.getDeclaredField("name");
// make private field accessible
field.setAccessible(true);
// set value of field
field.set(test, "Programiz");
// get value of field
// and convert it in string
String value = (String)field.get(test);
System.out.println("Name: " + value);
// access the private method
Method[] methods = obj.getDeclaredMethods();
System.out.println("Method Name: " + methods[0].getName());
int modifier = methods[0].getModifiers();
System.out.println("Access Modifier: " + Modifier.toString(modifier));
}
catch(Exception e) {
e.printStackTrace();
}
}
}
输出
Name: Programiz
Method Name: display
Access Modifier: private
在此示例中,我们有一个名为name的私有字段和一个名为display()
的私有方法。在这里,我们使用反射来访问类Test的私有字段和方法。
要了解反射,请访问Java Reflection。