public class Father { private String father; public Father() {
Field fs[] = this.getClass().getDeclaredFields();
for (int i = 0; i < fs.length; i++) {
Field f = fs[i];
System.out.println(f.getType().getName() + " " + f.getName());
}
}}
public class Son extends Father { private int age;
private String name; public Son() {
super();
// TODO Auto-generated constructor stub
}}
public class Test { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Son son = new Son();
}}这个是打印结果:
int age
java.lang.String name请重点分析Father的构造方法this变量,解释一下打印出来的为什么是上面的结果?我觉得的结果是:
java.lang.String name
解决方案 »
- 关于JTextArea,setText(String)其中String需要用线程控制1秒显示一个字符
- 关于 Anonymous Inner Class 的一道面试题
- java.net.SocketException: Software caused connection abort: recv failed
- 关于修改选项卡标题的问题
- Java发送HTTP请求和提取数据的Java代码:
- 一个smil文件中如何包含图片?
- 急~请教如何在JAI中释放文件资源
- 500分,关于用antlr进行java源代码的分析!
- List组件中哪个listener监听列表项下标变化的事件
- 请教JBUILDER 6个人版注册码?
- java 和 c#
- Sub Class 与 Child Class的区别
数组循环输出,结果是对的
不好意思,我说错了
我觉得的结果这个是,
java.lang.String fahter
改为
protected String father;
输出结果还是:
int age
java.lang.String name
而没有
java.lang.String father
何解?
恩,这个this指的是当前对象,在运行的时候并不一定是当前类的一个实例。可以这么理解吧?
getDeclaredFields这个方法能获取到这个类本身的所有字段不论是private还是其它的。继承的就不行了。必须要是在本类中声明的。而反射中还提供了一个getFields方法这个方法可以得到继承的但是必须是public修饰的
getFields()获得某个类的所有的公共(public)的字段,包括父类。 getDeclaredFields()获得某个类的所有申明的字段,即包括public、private和proteced,
但是不包括父类的申明字段。
子类被实例化的时候调用父类的构造方法。
另外给你一个简历可以看得更直观。你输出一下子类对象的地址,父类对象的地址,然后输出一下this的地址。看看this和哪一个一样。