通过反射得到一个类的对象,如何对该对象对应的类的父类中的变量赋值

来源:互联网 发布:无线游戏鼠标 知乎 编辑:程序博客网 时间:2024/05/18 18:45
class  Person{  
    private int age;  
    private String name;  
    public Person(){  
           
    }  
    public Person(int age, String name){  
        this.age = age;  
        this.name = name;  
    }  
   
    public int getAge() {  
        return age;  
    }  
    public void setAge(int age) {  
        this.age = age;  
    }  
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
}  
   
class SuperMan extends Person implements ActionInterface  
{  
    private boolean BlueBriefs;  
       
    public static void fly()  
    {  
        System.out.println("超人会飞耶~~");  
    }  
       
    public boolean isBlueBriefs() {  
        return BlueBriefs;  
    }  
    public void setBlueBriefs(boolean blueBriefs) {  
        BlueBriefs = blueBriefs;  
    }  
   
    @Override  
    public void walk(int m) {  
        // TODO Auto-generated method stub  
        System.out.println("超人会走耶~~走了" + m + "米就走不动了!");  
    }  
}  
interface ActionInterface{ 
    public static int nonono = 1;
    public void walk(int m);  
}  



通过以下代码可以获取该对象的父类:
方法1:
SuperMan superMan = new SuperMan(10"LL");
        try {
            //Field field = person.getClass().getDeclaredField("name");
            Field field =  superMan.getClass().getSuperclass().getDeclaredField("name");
            field.setAccessible(true);
            field.set(superMan, "ERWA");
            System.out.println(superMan.getName());
        catch (NoSuchFieldException | IllegalAccessException e) {
            e.printStackTrace();
        }
方法2:
public static void main(String[] args) throws Exception {
    Class<?> clazz = null;
    clazz = Class.forName("bianchengzhimei.SuperMan");
    Object p1 = clazz.newInstance();
    Field personNameField = null;
    for(;clazz != Object.class;clazz= clazz.getSuperclass()){
        try {
            personNameField = clazz.getDeclaredField("name");
        catch (Exception e) {}
    }
    personNameField.setAccessible(true);
    personNameField.set(p1, "darlingFish");
 
    System.out.println(personNameField.get(p1));
}

获取该对象
SuperMan superMan = new SuperMan(10"LL");
        try {
            //Field field = person.getClass().getDeclaredField("name");
            Field field =  superMan.getClass().getDeclaredField("name");
            field.setAccessible(true);
            field.set(superMan, "ERWA");
            System.out.println(superMan.getName());
        catch (NoSuchFieldException | IllegalAccessException e) {
            e.printStackTrace();
        }






阅读全文
0 0