反射机制之破坏封装性

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;
 } 
}


版权声明:本文为MK259原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>