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