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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘郑瑞 中级黑马   /  2013-1-26 17:20  /  2030 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘郑瑞 于 2013-1-26 17:46 编辑

下面程序的输出结果为什么是Test?
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());
        }
}

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

5 个回复

倒序浏览

回帖奖励 +1

         11111111111111111111111
回复 使用道具 举报

getClass()在Object类中定义成了final,子类不能覆盖该方法,所以你在
test方法中调用getClass().getName()方法,其实就是在调用从父类继承的getClass()方法,等效于调用super.getClass().getName()方法,所以,super.getClass().getName()方法返回的是Test。
如果想得到父类的名称,如下代码:
getClass().getSuperClass().getName();

评分

参与人数 2技术分 +1 黑马币 +3 收起 理由
冯海霞 + 1
刘郑瑞 + 3 神马都是浮云

查看全部评分

回复 使用道具 举报
楼上正解
回复 使用道具 举报
getClass的方法是返回此对象运行时类的 Class 对象,方法是final修饰,所以无论如何super,其调用的getClass也只会是返回其对象运行的class类,也就是test类
回复 使用道具 举报
没想过这个问题,一开始就蒙了,后来理清了思路

未命名.PNG (28.88 KB, 下载次数: 35)

未命名.PNG

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

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