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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 hejinzhong 于 2014-8-21 06:23 编辑

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

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

9 个回复

倒序浏览
估猜第一个不行,因为super不是父类直接地址的引用,只是指向了父类,
回复 使用道具 举报
你打错了哥们,第13行的方法是getSuperclass()。老师好像有提过,第一种是返回子类的字节码名,第二种返回超类,
回复 使用道具 举报
很奇怪,第一个打印的结果是父类,第二个打印结果是子类,难道getClass().getSuperclass()返回的不是子类的父类吗,API上说的很清楚啊: 返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class,那么为什么结果还是子类的名称呢?
       有哪位大婶可以出来解惑下么。。
回复 使用道具 举报
怀念黑海岸 发表于 2014-8-21 13:25
很奇怪,第一个打印的结果是父类,第二个打印结果是子类,难道getClass().getSuperclass()返回的不是子类的 ...

你说反了把!第一个打印的是子类,第二个打印的是父类。
我翻了下API,getclass()这个方法是object中的方法,关键点不是这里,而是他是final类型方法,代表着什么呢?虽然所有类都继承了object,但是他们都没有权利去覆写这个方法,只是拿来使用。也就是说每个方法中的getclass()方法都一样。
在这里 super.getClass 和 this.getClass 是一样。所以第一个输出的还是子类本身的字节码。

这么理解可以?
回复 使用道具 举报
136616244 发表于 2014-8-21 07:11
估猜第一个不行,因为super不是父类直接地址的引用,只是指向了父类,

Test继承了Date,父类中的getclass不是私有,为何不能访问呢?
回复 使用道具 举报
hejinzhong 发表于 2014-8-21 20:34
Test继承了Date,父类中的getclass不是私有,为何不能访问呢?

曾经看见老师试过打印this的地址就是本类对象的地址,打印super报错了,,这样子
所以还是有差别的
回复 使用道具 举报
a6511631 发表于 2014-8-21 10:21
你打错了哥们,第13行的方法是getSuperclass()。老师好像有提过,第一种是返回子类的字节码名,第二种返回 ...

貌似13行这样还是OK的把!
回复 使用道具 举报
System.out.println(super.getClass().getName());
System.out.println(getClass().getSuperclass().getName());   我的理解 getClass()都是Object 的方法 ,super.getClass和this.getClass()应该结果一样吧
回复 使用道具 举报
恩恩,函数是final的话,就是相同,也就是带入的代码都是一样的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马