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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵国刚 中级黑马   /  2013-8-9 18:31  /  1200 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面程序的输出结果是多少?
import 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());
        }
}

很奇怪,结果是Test

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 longlangcx 于 2013-8-9 18:51 编辑

super关键字并不能代表一个真正意义上的父类引用,它只是用来调用父类中的方法。

super.getClass()代表调用了父类中的getClass()方法,然而,this.getClass()调用的其实也是父类中的getClass()方法,二者其实是一回事儿,因为getClass()方法是定义在Object类中的一个final方法。也就是说只有覆盖了某方法之后,使用this和super关键字调用此方法才会产生行为上的不同,然而getClass()并没有被覆盖,也不允许被覆盖。

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

回复 使用道具 举报
Date继承object类而,而你的Date并没覆盖次方法,所以继续调用object类,而object类在调用此方法时候是返回运行时的对象类型。而你运行时的对象类型是Test。如果你需要打印出Date,那么应该这样写getClass().getSuperClass().getName();  

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

回复 使用道具 举报
嗯嗯  longlangcx他说得对  super关键字并不能代表一个真正意义上的父类引用。。
回复 使用道具 举报
longlangcx 发表于 2013-8-9 18:50
super关键字并不能代表一个真正意义上的父类引用,它只是用来调用父类中的方法。

super.getClass()代表调 ...

哦原来是这样啊,谢谢啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马