class Person {
int age = 6; public int getInfo() throws Exception {
return this.age;
} public int getInfo2() throws Exception {
int result = 0;
Class clazz = this.getClass();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
result = Integer.valueOf(field.get(this).toString());
}
return result;
}
}class Student extends Person {
int age = 5;}
public class Test2 {
public static void main(String args[]) throws Exception {
Student s = new Student();
System.out.print(s.getInfo());
System.out.print(s.getInfo2());
}
}输出结果为什么不一致?
getInfo2返回Student类的age是因为:
Class clazz=this.getClass();这行代码得到的类其实是Student,如果把这行代码改为:
Class clazz=Person.class;结果就一样了;
比如:父类有name属性,子类有age属性
Class clazz=this.getClass();只能得到子类的属性
Class clazz = Class.forName("test.Person");只能得到父类的属性
如果 Class.forName("test.Student");就能取到子类的值了
在Student类里面的两个方法中,我加入了打印this的语句。
执行Test2 的main方法时,这些语句都显示this是Student
2)如果这些字段不是public的, 你可以 用 Class.getDeclaredFields()这个方法取得本类所有字段, 再用Class.getSuperclass()取得其超类,并用Class.getDeclaredFields()取得超类的所有字段;