今天在TSS上又看到有人討論java多繼承的問(wèn)題,是想起這個(gè)話題的原因。^_^
java中任何類都默認(rèn)繼承 Java.lang.Object,除非被另一個(gè)繼承覆蓋(override),hoho 俺一直這么稱呼override的,感覺(jué)更加貼切一些。
請(qǐng)看以下代碼:
package org.myth.test;
public class SuperSon{
SuperSon(){
System.out.println("this is super son");
}
}
對(duì)于編譯器來(lái)說(shuō),這段代碼會(huì)被首先補(bǔ)全為:
package org.myth.test;
public class SuperSon extends Object{
SuperSon(){
System.out.println("this is super son");
}
}
對(duì)待任何一個(gè)類,編譯器會(huì)去檢查extends關(guān)鍵字,如果沒(méi)有,編譯器會(huì)默認(rèn)添加extens Object
extends Object就是一段默認(rèn)隱藏的代碼,同樣在Constructor中,也有一段默認(rèn)隱藏的代碼。
package org.myth.test;
public class SuperSon extends Object{
SuperSon(){
super();//這就是一段默認(rèn)隱藏代碼
System.out.println("this is super son");
}
//整個(gè)構(gòu)造方法也是一段默認(rèn)隱藏代碼
}
如同編譯類時(shí)編譯器回去檢查extends關(guān)鍵字一樣,編譯器會(huì)首先檢查是否存在constructor,如果沒(méi)有,默認(rèn)增加ClassName()構(gòu)造方法。
在構(gòu)造方法內(nèi)部,編譯器會(huì)檢查第一行代碼是否為super構(gòu)造方法,如果不是,默認(rèn)添加super()
這個(gè)就是為什么 new一個(gè)對(duì)象的時(shí)候,首先調(diào)用的是父類的構(gòu)造方法。
一個(gè)錯(cuò)誤代碼示例:
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");
}
}
嘿嘿 第一篇文章