使用反射调用私有方法

1.创建一个Person类,写几个方法

package seday18c;
/**
 * @author xingsir
 * 创建一个Person类,写几个方法
 */
public class Person {
	public void eat() {
		System.out.println("我在吃");
	}
	public void run() {
		System.out.println("我在跑");
	}
	//加个私有方法,用于测试
	private void eat(String name) {
		System.out.println("我是"+name+",我在吃");
	}
	public void eat(String name,int count) {
		System.out.println("我是"+name+",我在吃"+count+"只牛蛙");
	}

}

  2.使用反射调用私有方法

package seday18c;

import java.lang.reflect.Method;

/**
* @author xingsir
* 使用反射调用私有方法
*/
public class ReflectDemo5 {

	public static void main(String[] args) throws Exception {
          //通过Class的静态方法forName加载Person
		Class cls=Class.forName("seday18c.Person");
		//实例化对象的方法
		Object o=cls.newInstance();
		/*
		 * 在类的外部通过反射调用私有方法会破坏封装性如不是必要操作或设计需求,不建议这样做。
		 */
		Method m= cls.getDeclaredMethod("eat",String.class);
		//在访问私有方法前设置访问操作(不设置直接调用会报错)
		m.setAccessible(true);
        m.invoke(o,"八戒");
		
	}

}

  

原文地址:https://www.cnblogs.com/xingsir/p/12667594.html