歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java面試題之super.getClass方法調用

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();

如果這道題沒有繼承任何類,我相信就不會掉進陷阱裡了。

明白了嗎?

Copyright © Linux教程網 All Rights Reserved