黑马程序员技术交流社区
标题: 关于super.getClass()的问题 [打印本页]
作者: 赵庆礼 时间: 2012-6-27 11:09
标题: 关于super.getClass()的问题
本帖最后由 赵庆礼 于 2012-6-27 11:53 编辑
super.getClass()方法调用 import java.util.Date;
public class TestDemo extends Date
{
public static void main(String[] args)
{
new TestDemo().test();
}
public void test()
{
System.out.println(super.getClass().getName());
}
}
为什么打印的结果是TestDemo,而不是Date。一直想不明白,哪位大侠帮忙解释一下
作者: 周朋飞 时间: 2012-6-27 11:32
Object的类中的getClass方法是这样定义的public final Class<?> getClass() 发现是被定义了final类型,,所以子类是不能覆盖该方法的,Date类只是从父类那里继承过来了而已,所以date的子类也是从Object继承过来的,所以你直接调用跟super。getClass是等效的
作者: 王明明 时间: 2012-6-27 11:37
本帖最后由 王明明 于 2012-6-27 12:00 编辑
import java.util.Date;
public class TestDemo extends Date
{
public static void main(String[] args)
{
new TestDemo().test();
//TestDemo s= new TestDeom();
//s.test(); 上面等于这样的代码 创建的是TestDemo 的类
}
public void test()
{
System.out.println(super.getClass().getName()); //再看这里 方法中调用super.getClass().getName()方法,其实就是在调用从父类继承的getClass()方法, 虽然你用了super 但最后调用的 还是子类的getName()
System.out.println(this.getClass().getSuperclass().getName()); 你可以这样输出父类名字
}
}
作者: 王莹 时间: 2012-6-27 11:45
在TestDemo方法中,直接调用getClass().getName()方法,返回的是TestDemo类名.getClass()是在Object类中定义的,Date也是继承了Object类中的getClass()方法,在Object类中getClass()定义成了final,子类不能覆盖该方法,所以,在TestDemo方法中调用getClass().getName()方法,其实就是在调用从父类继承的getClass()方法, 它是等效于调用super.getClass().getName() 方法, 所以,super.getClass().getName()方法返回的也应该是TestDemo,你要是输入的是this.getClass().getName(),返回的也应该是TestDemo。
如果想得到父类的名称,应该用下面的代码:
getClass().getSuperClass().getName();
作者: 赵庆礼 时间: 2012-6-27 11:50
周朋飞 发表于 2012-6-27 11:32
Object的类中的getClass方法是这样定义的public final Class getClass() 发现是被定义了final类型,,所以 ...
谢谢,貌似明白了,我再试试
作者: 赵庆礼 时间: 2012-6-27 11:51
王莹 发表于 2012-6-27 11:45
在TestDemo方法中,直接调用getClass().getName()方法,返回的是TestDemo类名.getClass()是在Object类中定 ...
谢谢,明白了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |