聊聊java(二)關於java中getClass()和super.getClass()

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

相關文章
相關標籤/搜索