A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一直很安静 中级黑马   /  2013-11-22 19:42  /  1626 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Test extends Date{public static void main (String[] args){new Test().test();}public void test(){System.out.println (super.getClass().getName());}}看到解释说由于getClass方法在object 中定义成了final 所以子类不能覆盖,test方法中调用getClass().getName()其实就是在调用从父类中继承的。既然是这样为什么输出的不是父类名呢?

点评

重复发帖  发表于 2013-11-22 23:44

4 个回复

倒序浏览
只有对象才能调用getClass方法,
你不会以为实例一个子类会帮你顺带新弄一个父类的实例吧
那你要是整一个十几层继承的得让虚拟机给你准备多少空间啊
回复 使用道具 举报
getClass 方法返回的是运行时类的Class对象。此时运行的是Test类,返回的就是Test类的Class对象,所以getName时就得到了“Test”。你的这个问题里将super改成this,它得到的结果还是“Test”。
回复 使用道具 举报
因为子类创建的对象,调用getClass方法。说以会输出子类的类名,如果创建父类的对象调用。。会输出父类的类名
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马