黑马程序员技术交流社区

标题: super.getClass()方法调用 [打印本页]

作者: 赵国刚    时间: 2013-8-9 18:31
标题: super.getClass()方法调用
下面程序的输出结果是多少?
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

作者: longlangcx    时间: 2013-8-9 18:50
本帖最后由 longlangcx 于 2013-8-9 18:51 编辑

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

super.getClass()代表调用了父类中的getClass()方法,然而,this.getClass()调用的其实也是父类中的getClass()方法,二者其实是一回事儿,因为getClass()方法是定义在Object类中的一个final方法。也就是说只有覆盖了某方法之后,使用this和super关键字调用此方法才会产生行为上的不同,然而getClass()并没有被覆盖,也不允许被覆盖。
作者: vampire★sky    时间: 2013-8-9 18:55
Date继承object类而,而你的Date并没覆盖次方法,所以继续调用object类,而object类在调用此方法时候是返回运行时的对象类型。而你运行时的对象类型是Test。如果你需要打印出Date,那么应该这样写getClass().getSuperClass().getName();  
作者: a767175432    时间: 2013-8-9 20:22
嗯嗯  longlangcx他说得对  super关键字并不能代表一个真正意义上的父类引用。。
作者: 赵国刚    时间: 2013-8-9 20:30
longlangcx 发表于 2013-8-9 18:50
super关键字并不能代表一个真正意义上的父类引用,它只是用来调用父类中的方法。

super.getClass()代表调 ...

哦原来是这样啊,谢谢啊




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