黑马程序员技术交流社区
标题:
这题有点绕,发出来大家一起琢磨琢磨结果是什么,为什么
[打印本页]
作者:
傲鸽
时间:
2013-7-2 23:18
标题:
这题有点绕,发出来大家一起琢磨琢磨结果是什么,为什么
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-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()。
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()); //Output: Test
System.out.println(getClass().getSuperclass().getName()); //Output: java.util.Date
System.out.println(Date.class.getName()); //Output: java.util.Date
System.out.println(super.getClass().getSuperclass().getName()); //Output: java.util.Date
System.out.println(new Date().getClass().getName()); //Output: java.util.Date
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2