黑马程序员技术交流社区

标题: 求解!一起来看看这个坑爹的问题 [打印本页]

作者: 刘郑瑞    时间: 2013-1-26 17:20
标题: 求解!一起来看看这个坑爹的问题
本帖最后由 刘郑瑞 于 2013-1-26 17:46 编辑

下面程序的输出结果为什么是Test?
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());
        }
}


作者: 张钧杰    时间: 2013-1-26 17:53
         11111111111111111111111
作者: 范天成    时间: 2013-1-26 17:54

getClass()在Object类中定义成了final,子类不能覆盖该方法,所以你在
test方法中调用getClass().getName()方法,其实就是在调用从父类继承的getClass()方法,等效于调用super.getClass().getName()方法,所以,super.getClass().getName()方法返回的是Test。
如果想得到父类的名称,如下代码:
getClass().getSuperClass().getName();
作者: Rancho_Gump    时间: 2013-1-26 18:06
楼上正解
作者: 郭嘉    时间: 2013-1-26 18:09
getClass的方法是返回此对象运行时类的 Class 对象,方法是final修饰,所以无论如何super,其调用的getClass也只会是返回其对象运行的class类,也就是test类
作者: 黄锦成    时间: 2013-1-26 18:18
没想过这个问题,一开始就蒙了,后来理清了思路

未命名.PNG (28.88 KB, 下载次数: 47)

未命名.PNG





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