今天在TSS上又看到有人討論java多繼承的問題,是想起這個話題的原因。^_^
java中任何類都默認繼承 Java.lang.Object,除非被另一個繼承覆蓋(override),hoho 俺一直這么稱呼override的,感覺更加貼切一些。
請看以下代碼:
package org.myth.test;
public class SuperSon{
SuperSon(){
System.out.println("this is super son");
}
}
對于編譯器來說,這段代碼會被首先補全為:
package org.myth.test;
public class SuperSon extends Object{
SuperSon(){
System.out.println("this is super son");
}
}
對待任何一個類,編譯器會去檢查extends關鍵字,如果沒有,編譯器會默認添加extens Object
extends Object就是一段默認隱藏的代碼,同樣在Constructor中,也有一段默認隱藏的代碼。
package org.myth.test;
public class SuperSon extends Object{
SuperSon(){
super();//這就是一段默認隱藏代碼
System.out.println("this is super son");
}
//整個構造方法也是一段默認隱藏代碼
}
如同編譯類時編譯器回去檢查extends關鍵字一樣,編譯器會首先檢查是否存在constructor,如果沒有,默認增加ClassName()構造方法。
在構造方法內部,編譯器會檢查第一行代碼是否為super構造方法,如果不是,默認添加super()
這個就是為什么 new一個對象的時候,首先調用的是父類的構造方法。
一個錯誤代碼示例:
package org.myth.test;
public class SuperMan {
SuperMan(String s){
System.out.println("this is super man");
}
}
package org.myth.test;
public class SuperSon extends SuperMan{
SuperSon(){
System.out.println("this is super son");
}
}
嘿嘿 第一篇文章