A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张庚 中级黑马   /  2013-2-8 13:12  /  909 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有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");
}
}

1 个回复

倒序浏览
  1. package com.heima;
  2. import java.lang.reflect.Method;
  3. class TeStudent {
  4.         private String name = null;

  5.         public String getName() {
  6.                 return name;

  7.         }
  8.         public void setName(String name) {
  9.                 this.name = name;
  10.         }
  11. }
  12. class Student extends TeStudent {

  13. }
  14. class Test {
  15.         public static void main(String[] args) throws Exception {
  16.                 //Student字节码文件c
  17.                 Class c = Class.forName("com.heima.Student");
  18.                 //获取c类的实例对象obj
  19.                 Object obj = c.newInstance();
  20. //                因为对象c是Student的实例对象所以强制转换为Student类
  21.                 Student s = (Student)obj;
  22. //                由c获取c父类的字节码文件
  23.                 Class supclazz = c.getSuperclass();
  24. //                获取Student的setName方法
  25.                 Method mm = supclazz.getDeclaredMethod("setName",String.class);
  26. //                执行setName方法
  27.                 mm.invoke(obj, "11");
  28.                
  29.                 System.out.println(s.getName());
  30.                 /**
  31.                  * 因为setName方法虽然被Student所继承,但不是student的方法
  32.                  * 所以要获取其父类来执行此方法
  33.                  * 操作步骤:
  34.                  * 1. 获取Student类的Class字节码文件
  35.                  * 2、 获取其实例对象
  36.                  * 3、 获取Student的父类
  37.                  * 4、获取setName方法
  38.                  * 5. 执行setName方式
  39.                  *
  40.                  *
  41.                  * **/
  42.         }
  43. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马