黑马程序员技术交流社区

标题: 这题有点绕,发出来大家一起琢磨琢磨结果是什么,为什么 [打印本页]

作者: 傲鸽    时间: 2013-7-2 23:18
标题: 这题有点绕,发出来大家一起琢磨琢磨结果是什么,为什么
  1. import java.util.Date;
  2. public  class Test extends Date{

  3.         public static void main(String[] args) {
  4.                                 new Test().test();

  5.         }
  6.        
  7.         public void test()
  8.         {
  9.                 System.out.println(
  10.                                 super.getClass().getName()
  11.                 );
  12.         }
  13. }
复制代码

作者: 肥猫    时间: 2013-7-2 23:26
这题我好象在一家公司的面试题里见过.
作者: lanbuohan    时间: 2013-7-2 23:36
我是这么想的,你test方法中,调用父类(object)的无参的构造函数,然后再调用父类的getClass中,在Object中getClass返回的是一个对象,代表Object OB=new  Object。这时super.getClass=OB,OB.getName就会返回Object中所有的名字。个人看法,有错请指出
作者: 傲鸽    时间: 2013-7-3 07:24
嗯,老师昨天讲date给举得例子,让大家想想,今天讲
作者: longlangcx    时间: 2013-7-3 10:27
首先,这个类中的test方法不是构造器。
然后,super关键字不代表实际引用,并不等于一个真实存在的Date对象在调用getClass(),比如new Date().getClass().getName()肯定会返回java.util.Date,而super则不会。super.getClass()只是指调用父类中的的getClass()方法,而getClass实际上都是继承自Object类的,即使你不打super其实调用的也是父类的getClass()方法,作用就是获取运行时的实际类型,调用的主体是Test对象,当然返回的Class对象也是Test类的Class对象。想返回父类的Class对象可以用getClass().getSuperClass()。
  1. import java.util.Date;

  2. public class Test extends Date{
  3.         public static void main(String[] args) {
  4.                 new Test().test();
  5.         }

  6. public void test(){
  7.         System.out.println(super.getClass().getName());                                        //Output: Test
  8.         System.out.println(getClass().getSuperclass().getName());                //Output: java.util.Date
  9.         System.out.println(Date.class.getName());                                                //Output: java.util.Date       
  10.         System.out.println(super.getClass().getSuperclass().getName());        //Output: java.util.Date
  11.         System.out.println(new Date().getClass().getName());                        //Output: java.util.Date
  12.         }
  13. }
复制代码





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