黑马程序员技术交流社区
标题:
看看它的输出结果为什么是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