黑马程序员技术交流社区
标题:
关于java反射的一个问题
[打印本页]
作者:
张庚
时间:
2013-2-8 13:12
标题:
关于java反射的一个问题
有3个类,一个测试类Text,一个父类FStudent,一个子类Student
父类有私有属性private String name 用set/get封装起来了
子类继承了父类
我想在测试类利用反射,设置父类的方法,或拿到父类的的值,我该怎么做,代码如下
package s2jsp.lg.dao.imp1;
/**
* 子类
* @author Lan
*
*/
public class Student extends TeStudent {
}
/**
* 父类
* @author Lan
*
*/
class TeStudent{
private String name = null;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package s2jsp.lg.dao.imp1;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* 测试类
*
* @author Lan
*
*/
public class Test {
/**
* @param args
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws Exception {
Class c = Class.forName("s2jsp.lg.dao.imp1.Student");
Object obj = c.newInstance();
Method mm = c.getDeclaredMethod("setName",String.class);
mm.invoke(obj, "11");
}
}
作者:
ying
时间:
2013-2-8 13:58
package com.heima;
import java.lang.reflect.Method;
class TeStudent {
private String name = null;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Student extends TeStudent {
}
class Test {
public static void main(String[] args) throws Exception {
//Student字节码文件c
Class c = Class.forName("com.heima.Student");
//获取c类的实例对象obj
Object obj = c.newInstance();
// 因为对象c是Student的实例对象所以强制转换为Student类
Student s = (Student)obj;
// 由c获取c父类的字节码文件
Class supclazz = c.getSuperclass();
// 获取Student的setName方法
Method mm = supclazz.getDeclaredMethod("setName",String.class);
// 执行setName方法
mm.invoke(obj, "11");
System.out.println(s.getName());
/**
* 因为setName方法虽然被Student所继承,但不是student的方法
* 所以要获取其父类来执行此方法
* 操作步骤:
* 1. 获取Student类的Class字节码文件
* 2、 获取其实例对象
* 3、 获取Student的父类
* 4、获取setName方法
* 5. 执行setName方式
*
*
* **/
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2