反射机制之破坏封装性
package com.jason.base.reflect;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* 采用反射机制访问private修饰的属性和方法,破坏了封装性
* @author Administrator
*
*/
public class PrivateTest
{
public static void main(String[] args) throws Exception
{
Private p = new Private();
Class<?> classType = p.getClass();
Method m = classType.getDeclaredMethod("setName", new Class[]{String.class});// 访问private修饰的方法
m.setAccessible(true);// 设置访问权限不受控制
m.invoke(p, new Object[]{"zhangsan"});
System.out.println(p.getName());
Field f = classType.getDeclaredField("name");// 访问private修饰的属性
f.setAccessible(true);
f.set(p, "lisi");
m = classType.getMethod("getName", new Class[]{});// 只能返回public修饰的方法
Object value = m.invoke(p, new Object[]{});
System.out.println(value);
}
}
class Private
{
private String name = "sam";
public String getName()
{
return name;
}
private void setName(String name)
{
this.name = name;
}
}