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();
如果這道題沒有繼承任何類,我相信就不會掉進陷阱裡了。
明白了嗎?