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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵庆礼 中级黑马   /  2012-6-27 11:09  /  2124 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由  赵庆礼 于 2012-6-27 11:53 编辑

super.getClass()方法调用
import java.util.Date;
public  class TestDemo extends Date
{
    public static void main(String[] args)
    {
        new TestDemo().test();
    }

    public void test()   
    {
        System.out.println(super.getClass().getName());
    }
}
为什么打印的结果是TestDemo,而不是Date。一直想不明白,哪位大侠帮忙解释一下

5 个回复

倒序浏览
Object的类中的getClass方法是这样定义的public final Class<?> getClass() 发现是被定义了final类型,,所以子类是不能覆盖该方法的,Date类只是从父类那里继承过来了而已,所以date的子类也是从Object继承过来的,所以你直接调用跟super。getClass是等效的

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 王明明 于 2012-6-27 12:00 编辑

import java.util.Date;
public  class TestDemo extends Date
{
    public static void main(String[] args)
    {
        new TestDemo().test();
//TestDemo s= new TestDeom();
//s.test();  上面等于这样的代码 创建的是TestDemo 的类
    }


    public void test()   
    {
        System.out.println(super.getClass().getName()); //再看这里 方法中调用super.getClass().getName()方法,其实就是在调用从父类继承的getClass()方法, 虽然你用了super 但最后调用的 还是子类的getName()
System.out.println(this.getClass().getSuperclass().getName());  你可以这样输出父类名字
    }
}
回复 使用道具 举报
在TestDemo方法中,直接调用getClass().getName()方法,返回的是TestDemo类名.getClass()是在Object类中定义的,Date也是继承了Object类中的getClass()方法,在Object类中getClass()定义成了final,子类不能覆盖该方法,所以,在TestDemo方法中调用getClass().getName()方法,其实就是在调用从父类继承的getClass()方法, 它是等效于调用super.getClass().getName() 方法, 所以,super.getClass().getName()方法返回的也应该是TestDemo,你要是输入的是this.getClass().getName(),返回的也应该是TestDemo。


如果想得到父类的名称,应该用下面的代码:
getClass().getSuperClass().getName();
回复 使用道具 举报
周朋飞 发表于 2012-6-27 11:32
Object的类中的getClass方法是这样定义的public final Class getClass() 发现是被定义了final类型,,所以 ...

谢谢,貌似明白了,我再试试
回复 使用道具 举报
王莹 发表于 2012-6-27 11:45
在TestDemo方法中,直接调用getClass().getName()方法,返回的是TestDemo类名.getClass()是在Object类中定 ...

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