加入收藏 | 设为首页 | 会员中心 | 我要投稿 宁德站长网 (https://www.0593zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Java面试题之super.getClass技巧调用

发布时间:2021-11-20 19:02:43 所属栏目:教程 来源:互联网
导读:Java面试题之super.getClass方法调用 今天从网上看了一道Java的面试题,结果不小心就掉在陷阱里了,我觉的这个面试题挺好的,所以分享给大家! 先看一下程序的代码,看看最后的输出结果是多少? import java.util.Date; public class Test extends Date { publ

Java面试题之super.getClass方法调用
 
今天从网上看了一道Java的面试题,结果不小心就掉在陷阱里了,我觉的这个面试题挺好的,所以分享给大家!
 
先看一下程序的代码,看看最后的输出结果是多少?
 
import java.util.Date;
 
public  class Test extends Date
{
 
      public void test()
      {
 
              System.out.println(super.getClass().getName());
 
      }
 
      public static void main(String[] args)
      {
 
              new Test().test();
 
      }
 
}
 
如果不了解,很可能得出错误的答案,其实答案是Test,是不是很奇怪,结果竟然是Test。
 
这道题就属于脑筋急转弯的题目,很简单的,也很容易落入陷阱中。我想大部分人之所以落入陷阱中可能是因为这个类继承了。
 
如果在test方法中,直接调用getClass().getName()方法的化,相当于调用this.getClass().getName(),这样返回的就是Test类名
 
由于getClass()在Object类中定义成了final,子类不能覆盖该方法,所以,Date类也是没有这个方法的,在test方法中调用getClass().getName()方法,其实就是在调用从父类继承的getClass()方法,等效于调用super.getClass().getName()方法,所以,super.getClass().getName()方法返回的也应该是Test。
 
如果想得到父类的名称,应该用如下代码:
 
getClass().getSuperClass().getName();
 
如果这道题没有继承任何类,我相信就不会掉进陷阱里了。
 
明白了吗?

(编辑:宁德站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读