標籤:system 技術分享 作用 src 情況 無法 turn 總結 string類
1.運行 TestInherits.java 樣本,觀察輸出,注意總結父類與子類之間構造方法的調用關係修改Parent構造方法的代碼,顯式調用GrandParent的另一個建構函式,注意這句調用代碼是否是第一句,影響重大!
結論: 通過 super 調用基類構造方法,必須是子類構造方法中的第一個語句。
2.思索:為什麼子類的構造方法在運行之前,必須調用父類的構造方法?能不能反過來?為什麼不能反過來?
建構函式的主要作用:建構函式是類的一個特殊方法,這個方法用來產生執行個體時由系統自動調用,程式員無法直接調用。建構函式方法名同類名相同且參數為空白。子類繼承父類後預設繼承父類的建構函式,即:子類存在隱含方法:super(),如果子類重寫建構函式則子類也隱含調用super()
3.探索技術的奧秘
參看ExplorationJDKSource.java樣本 此樣本中定義了一個類A,它沒有任何成員: class A { } 樣本直接輸出這個類所建立的對象 public static void main(String[] args) { System.out.println(new A()); }
我們得到了一個奇特的運行結果: [email protected]
前面樣本中,main方法實際上調用的是: public void println(Object x),這一方法內部調用了String類的valueOf方法。 valueOf方法內部又調用Object.toString方法: public String toString() { return getClass().getName() +"@" + Integer.toHexString(hashCode()); } hashCode方法是本地方法,由JVM設計者實現: public native int hashCode();
4.神奇的加號
前頁的樣本中,Fruit類覆蓋了Object類的toString方法。
結論: 在“+”運算中,當任何一個對象與一個String對象,串連時,會隱式地調用其toString()方法,預設情況下,此方法返回“類名 @ + hashCode”。為了返回有意義的資訊,子類可以重寫toString()方法。
【Java】介面與繼承課後動手動腦