这个问题。。csdn中的答案竟是错的。。
1 准备继承类
从上往下,依次继承。
2 方法编写(测试了很多次才写出来,基础不好啊 - -~!)
public static void demo(Object obj) {
Class<?> superclass = obj.getClass().getSuperclass();
System.out.println(superclass);
if(!(superclass.getSimpleName().equals("Object"))) {
try {
demo(superclass.newInstance());
} catch (InstantiationException | IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3 测试
public static void main(String[] args) {
Hehe hehe = new Hehe();
demo(hehe);
}
4 打印结果
class com.lan.learn.RIIT.bean.Message
class com.lan.learn.RIIT.bean.Middle
class com.lan.learn.RIIT.bean.User
class java.lang.Object
5 总结
问题纠结在,第一次打印结果正常,第二次的打印结果为Object,并没有依次打印。我分析的造成这个结果有两种情况
1 getSupperClass() 这个方法直接返回根基类
结论:这种情况下第一次打印结果也应该为Object,并且这个方法的返回类型为Class,Class对象的基类可不就是Object嘛
2 方法用的不对。
解决办法 : 通过测试各种get*()方法,发现还是得用getSupperClass()方法,然而这个方法的返回值为Class,并不是上一层父类,问题出在递归调用传递的参数需要一个确切的类的实例。由此恍然大悟,直接使用newInstance()方法获取实例。