黑马程序员技术交流社区

标题: 给大家出一个题,看能不能答上来 [打印本页]

作者: cbb    时间: 2014-11-8 07:55
标题: 给大家出一个题,看能不能答上来
  1. import java.util.Date;
  2. public class Test extends Date
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 new Test().text();
  7.         }
  8.         public void text()
  9.         {
  10.                 System.out.println(getClass().getSuperclass().getName());
  11.         }
  12. }
复制代码


大家先不编译运行,试想下结果:lol
作者: cbb    时间: 2014-11-8 07:58
  1. import java.util.Date;
  2. public class Test extends Date
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 new Test().text();
  7.         }
  8.         public void text()
  9.         {
  10.                 System.out.println(super.getClass().getName());
  11.         }
  12. }
复制代码


同上这个结果呢?
作者: wf111sxwf    时间: 2014-11-8 11:23
第一个应该是 javs.util.Date因为 getclass会获取当前对象的运行时类而getSuoerclass.会获取这个运行时类的父类类文件所以会获得父类类文件的名字。
第二个结果是Test原因是:super.getClass()是表示调用父类的方法。getClass方法来自Object类,它返回对象在运行时的类。因为在运行时的对象所属的类是Test,所以this.getClass()和super.getClass()都是返回Test。
作者: 陈召    时间: 2014-11-8 12:46
不明觉厉。。
作者: touch_world    时间: 2014-11-8 15:42
2楼出真理
作者: 高昌德    时间: 2014-11-8 16:00
好牛,,,,,
作者: 王会涛    时间: 2014-11-8 16:48
楼主自己找乐子! 也挺好的
作者: 焦旭宁1    时间: 2014-11-8 20:54
乐乐自作主张111
作者: cbb    时间: 2014-11-8 22:41
wf111sxwf 发表于 2014-11-8 11:23
第一个应该是 javs.util.Date因为 getclass会获取当前对象的运行时类而getSuoerclass.会获取这个运行时类的 ...

嗯嗯,当时我被第二个套进去了,一直在super上转~~~
作者: Eagle    时间: 2014-11-8 22:55
不看不知道。看来我也被super搞了。以为两个都是Date。。不过。还是没有明白第二个为什么是Test、、、、愚笨了。。。
作者: cbb    时间: 2014-11-8 23:21
Eagle 发表于 2014-11-8 22:55
不看不知道。看来我也被super搞了。以为两个都是Date。。不过。还是没有明白第二个为什么是Test、、、、愚 ...

在text中直接调用.getClass().getName()肯定返回的是text类名。
但是由于getClass()方法在object中定义的是final类型。
子类并不能覆盖父类的getClass()方法。
所以在子类中调用.getClass().getName()方法,其实就是在调用从父类继承的getClass()方法。
等于调用super.getClass().getName()方法,所以super.getClass().getName()返回的也应该是Test。

:lol我也迷了好久,如果不理解的话,单纯的把这个代码敲上去,运行,也没啥效果~~
作者: scoto263    时间: 2014-11-9 00:03
看了第二个代码:
super并不是表示父类的引用,而是调用父类的方法。

这里test类虽然继承了类Date,但是只是继承了此类的方法,实际上运行的类还是test类的,而此时根本没有Date对象的,如果你把那个super改成new Date()的话这时输出的结果那么就是你刚刚想的结果了。

但是上面的代码为撒输出的是test呢,因为getClass()获取的当前运行的类,既然当前运行的是test那么获取到的名字自然是test了。继承来的都只是方法,并没有被创建对象。

这里我问个问题:为撒我输出下面的内容结果都是class呢
Object o4=new demo().getClass().getSuperclass().getClass().getName();
Object o5=new Date().getClass().getSuperclass().getClass().getName();
System.out.println(o4+"           "+o5);
作者: scoto263    时间: 2014-11-9 11:43
scoto263 发表于 2014-11-9 00:03
看了第二个代码:
super并不是表示父类的引用,而是调用父类的方法。

没有人来回答我这个问题啊。。!!!!
作者: 空洞的望着窗外    时间: 2014-11-9 21:21
报错,getClass()没有对象
作者: 空洞的望着窗外    时间: 2014-11-9 21:24
test                                                         
作者: wf111sxwf    时间: 2014-11-13 22:32
scoto263 发表于 2014-11-9 11:43
没有人来回答我这个问题啊。。!!!!

Object o4 = xxxxxxxx;    多态  你把后面的结果提升为了Objiect类型的  SO  结果你就懂了~~~   我自己是这么想的   不知道对不对  大家一起 讨论  共同进步
作者: wf111sxwf    时间: 2014-11-14 18:14
scoto263 发表于 2014-11-9 00:03
看了第二个代码:
super并不是表示父类的引用,而是调用父类的方法。

我上面回答的错了  ,  唉  我再看看 再回答吧  
作者: yuye1124956    时间: 2014-11-14 18:52
表示看不懂 回去继续看视频
作者: scoto263    时间: 2014-11-14 20:24
Eagle 发表于 2014-11-8 22:55
不看不知道。看来我也被super搞了。以为两个都是Date。。不过。还是没有明白第二个为什么是Test、、、、愚 ...

getClass()是获取当前运行的类,正在运行中的是test,而它的父类只是被子类继承了方法,并没有创建对象,就是说整个程序中只有一个test对象,咱们这里调用父类的getClass,其实是调用object的getClass,你可以这么理解,咱们test类把所有的方法都集成过来到test类里面了,date和object在内存中其实是没有对象的,唯一的对象只有test
作者: scoto263    时间: 2014-11-14 20:27
这个问题感觉越绕越头晕了。。是不是该请一下黑马的老师来讲解讲解。
作者: 暴君    时间: 2014-11-14 21:08
第一个没问题,大家都知道Date,第二个,就是说getClass()方法,是final修饰,那么子类无法继承,只能调用,而调用这个方法捕获的就是当前类,因为没有Date对象对么?
但是既然是继承,那么先加载的应该是父类,而getClass()需要对象,没有对象就只是调用方法在当前类中运行,楼主,我又没有想错啊
作者: Eagle    时间: 2014-11-15 10:16
scoto263 发表于 2014-11-14 20:24
getClass()是获取当前运行的类,正在运行中的是test,而它的父类只是被子类继承了方法,并没有创建对象, ...

理解了,呵呵。谢谢啦。:D
作者: cczheng    时间: 2014-11-15 11:18
javs.util.Date
test
这个视频里有重点讲过的
作者: scoto263    时间: 2014-11-20 00:01
都是一群牛掰的人们。
作者: 迷失的小Z    时间: 2014-11-20 01:07
刚学API不懂啊……
作者: 张周飞    时间: 2014-11-20 09:25
涨姿势了
作者: 王小忠    时间: 2014-11-20 14:39
①:java.util.Date
②:Test




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