天天看點

有趣代碼二

直接上代碼:

import java.util.Date;

public class Super_Keyword extends Date {

	public static void main(String[] args) {
		Super_Keyword sk = new Super_Keyword();
		sk.test();
	}

	public void test() {
		System.out.println(this.getClass().getName());
		System.out.println(super.getClass().getName());
	}
	
}
           

輸出結果如下:

Super_Keyword

這裡也許一不注意,就認為輸出結果是Super_Keyword和Date。

這個getClass()實在Object中定義的,其聲明為了final native 。也就是說該方法是不能被子類覆寫的。是以this.getClass()與super.getClass()實際上都是調用的同一個方法,都是得到調用者的Class 對象。是以兩行代碼的輸出都是 Super_Keyword。

如果想要得到父類的類名,需要使用this.getClass().getSuperClass().getName();

其實犯上面的錯的原因就是不夠仔細,被那個super給忽悠了。

繼續閱讀