A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵磊 黑马帝   /  2011-7-27 21:26  /  2004 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在网上看了一段程序,感觉很有意思大家看看它的输出结果为什么是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]

评分

参与人数 1技术分 +2 收起 理由
admin + 2 值得探讨

查看全部评分

2 个回复

倒序浏览
黑马网友  发表于 2011-7-27 22:20:43
沙发
import那行写错了,第七行少括号

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

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

所以会有这样的结果

评分

参与人数 1技术分 +3 收起 理由
admin + 3 没看出来,这又一个专业人士

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-27 22:21:37
藤椅
java程序创建某个类的对象的时候,系统会隐试的创建该类的父类对象,只要有一个子类对象存在,就一定存在一个与之对应的父类对象,

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

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马