黑马程序员技术交流社区

标题: 下面程序员的输出结果是? [打印本页]

作者: 汪洋大海    时间: 2014-1-2 02:28
标题: 下面程序员的输出结果是?
  1. importjava.util.Date;
  2. public class Test extends Date{
  3.     public static voidmain(String[] args) {
  4.        new Test().test();
  5.     }
  6.    
  7.     public void test(){
  8.        System.out.println(super.getClass().getName());
  9.     }
  10. }
复制代码

作者: 浮出一个美    时间: 2014-1-2 07:52
答案是子类的class,因为父类的getClass()被子类的getClass()覆盖了?
作者: jibenwujie    时间: 2014-1-2 08:55
在网上看了一下这个问题的解释,
根据我的理解这个问题是这样的:
首先打印出的答案是Test
getClass()方法是属于object的方法,是返回运行时的实例,super是调用父类的方法
重点就在于super只是调用父类,而不是指向父类的一个引用
这就说明执行的时候,实际调用getClass()方法的对象还是Test的实例
在test方法中this.getClass() = super.getClass()
作者: 浮出一个美    时间: 2014-1-2 09:11
本帖最后由 浮出一个美 于 2014-1-2 09:13 编辑

楼上美女正解啊,加个好友吧。{:soso_e163:}
所以如果要调用父类的class的话应该这样做getClass().getSuperclass().getName()

作者: sd110572    时间: 2014-1-2 15:32
浮出一个美 发表于 2014-1-2 09:11
楼上美女正解啊,加个好友吧。
所以如果要调用父类的class的话应该这样做getClass().getSuper ...

其实楼上性别为男;P




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