这个问题其实有点深度,我尽量说明白。。
返回4你应该明白吧,调用super()返回的是父类的a。
关键是第二个。
首先,要看看javaAPI文档怎么说的:返回此 Object 的运行时类。返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象。
什么是运行时类?!运行时类是Object的一个实例,注意,关键来了,他返回的不是Object.class,他返回的是运行时类,就是虚拟机中是谁在运行就是谁,如果你new Demo2(),Demo2当然是运行时类,而不是Demo3。
根据上一段解释,Demo2是Object的子类,Demo2.getClass()返回的肯定是Demo2.class,
同样Demo3继承Demo2,即使有一个属于Demo2的getClass()返回的也不可能是Demo2class,因为当new Demo3()后,Demo3就是一个运行时类,只不过他拥有Demo2的资源结构。所以谁被实例化,谁就是一个运行时类。
最后,如果想要从Demo3中得到Demo2.class,可以用Demo3.getClass().getSuperClass(); |