黑马程序员技术交流社区

标题: 看看它的输出结果为什么是Test [打印本页]

作者: 赵磊    时间: 2011-7-27 21:26
标题: 看看它的输出结果为什么是Test
在网上看了一段程序,感觉很有意思大家看看它的输出结果为什么是Test呢?[code=java]improt java.util.Data;
public class Test extends Date{
public static void main(String[] args){
new Test().test();
}
public void test(){
System.out.println(super.getClass().getName();
}
}[/code]
作者: 匿名    时间: 2011-7-27 22:20
import那行写错了,第七行少括号

System.out.println(this.getClass().getSuperclass().getName());
这样输出的结果是正确的。

你的代码出现那种结果原因就是getClass()方法根本就不是父类的方法,而是反射类里的。super调用的方法还是反射类里的,过去当前对象。

所以会有这样的结果
作者: 匿名    时间: 2011-7-27 22:21
java程序创建某个类的对象的时候,系统会隐试的创建该类的父类对象,只要有一个子类对象存在,就一定存在一个与之对应的父类对象,

重点::在子类方法中使用SUPPER引用的时候,supper总是指向作为该方法调用者的子类对象所对应的父类对象,注意是方法调用者而不是父类调用着。所以这个调用者。getClassz()返回的还是子类的字解码,只有通过getSupperClass()才是父类字节码




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2