黑马程序员技术交流社区
标题:
对getClass()的疑惑
[打印本页]
作者:
张豪杰
时间:
2013-2-26 23:05
标题:
对getClass()的疑惑
mport java.util.Date;
public class Test extends Date{
public static void main(String[] args) {
new Test().test();
}
public void test(){
System.out.println(super.getClass().getName());
}
}
为什么输出的是子类不是父类?
作者:
彭颖
时间:
2013-2-27 00:37
getClass返回的是此 Object 的运行时类。返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象。
主函数里运行的是Test,所以是返回此对象运行时类的Class对象就是Test
作者:
付玉光
时间:
2013-2-27 01:41
import java.util.Date;
class Test1 extends Date{
public static void main(String[] args) {
new Test1().test();
}
public void test(){
System.out.println(super.getClass().getName());
}
}
//为什么输出的是子类不是父类????
//①
//getClass()方法位于Object类当中,是一个不可被子类覆写的方法,
//是一个非静态方法,可由对象来调用,该方法的返回值是由所表示类的
//static synchronized 方法锁定的Class对象,也就是说,当我们在程序中
//用到某个类时,类加载器把它对应的字节码文件加载进内存并对其进行静态
//代码块初始化时,就确定了,当调用该方法后的返回值为本类的字节码文件对象。
//②
//super调用父类的方法,主要作用在子类中定义了和父类中同名的属性或方法,
//但想访问父类中的属性或方法时而用这种形式。
//希望对你有帮助{:soso_e100:}
作者:
王钊
时间:
2013-2-27 11:28
本帖最后由 王钊 于 2013-2-27 11:30 编辑
要看看javaAPI文档怎么说的:返回此 Object 的
运行时类
。返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象。
什么是运行时类?!运行时类是Object的一个实例,注意,他返回的不是Object.class,他返回的是运行时类,就是虚拟机中是谁在运行就是谁,如果你new Date(),Date当然是运行时类,而不是Test。
Test继承Date,即使有一个属于Date的getClass()返回的也不可能是Date.class,因为当new Test()后,class Test就是一个运行时类,只不过他拥有Date的资源结构。所以谁被实例化,谁就是一个运行时类。
最后,如果想要从Test中得到Date.class,可以用this.getClass().getSuperclass();
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2