使用反射調用私有方法


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,"八戒");
		
	}

}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM