黑马程序员技术交流社区
标题:
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