黑马程序员技术交流社区

标题: 关于super.getClass()的问题 [打印本页]

作者: 赵庆礼    时间: 2012-6-27 11:09
标题: 关于super.getClass()的问题
本帖最后由  赵庆礼 于 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。一直想不明白,哪位大侠帮忙解释一下

作者: 周朋飞    时间: 2012-6-27 11:32
Object的类中的getClass方法是这样定义的public final Class<?> getClass() 发现是被定义了final类型,,所以子类是不能覆盖该方法的,Date类只是从父类那里继承过来了而已,所以date的子类也是从Object继承过来的,所以你直接调用跟super。getClass是等效的
作者: 王明明    时间: 2012-6-27 11:37
本帖最后由 王明明 于 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());  你可以这样输出父类名字
    }
}

作者: 王莹    时间: 2012-6-27 11:45
在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:50
周朋飞 发表于 2012-6-27 11:32
Object的类中的getClass方法是这样定义的public final Class getClass() 发现是被定义了final类型,,所以 ...

谢谢,貌似明白了,我再试试
作者: 赵庆礼    时间: 2012-6-27 11:51
王莹 发表于 2012-6-27 11:45
在TestDemo方法中,直接调用getClass().getName()方法,返回的是TestDemo类名.getClass()是在Object类中定 ...

谢谢,明白了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2