import java.util.Date; public class Test extends Date{ public static void main(String[] args) { new Test().test(); } public void test(){ System.out.println(super.getClass().getName()); } }
你可能會認爲是Date,可是實際的結果是Test。沒錯,你沒有看錯,super.getClass()並不會返回超類的引用。爲何super沒有起做用呢?簡單來講,super並不能表明一個超類的引用。 java
由於super並無表明超類的一個引用的能力,只是表明調用父類的方法而已。因此,在子類的方法中,不能這樣用System.out.println(super);也不能使用super.super.mathod();this
事實上,super.getClass()是表示調用父類的方法。getClass方法來自Object類,它返回對象在運行時的類型。由於在運行時的對象類型是Test,因此this.getClass()和super.getClass()都是返回Test。code
此外,因爲getClass()在Object類中定義成了final,子類不能覆蓋該方法,因此,在test方法中調用getClass().getName()方法,其實就是在調用從父類繼承的getClass()方法,等效於調用super.getClass().getName()方法,因此,super.getClass().getName()方法返回的也應該是Test。 對象
若是想獲得父類的名稱,應該用以下代碼: 繼承
Java代碼
getClass().getSuperClass().getName();get