關(guān)于extends 和 constructor的默認實現(xiàn)與覆蓋策略
今天在TSS上又看到有人討論java多繼承的問題,是想起這個話題的原因。^_^
請看以下代碼:
public class SuperSon{
SuperSon(){
System.out.println("this is super son");
}
}
對于編譯器來說,這段代碼會被首先補全為:
public class SuperSon extends Object{
SuperSon(){
System.out.println("this is super son");
}
}
對待任何一個類,編譯器會去檢查extends關(guān)鍵字,如果沒有,編譯器會默認添加extens Object
extends Object就是一段默認隱藏的代碼,同樣在Constructor中,也有一段默認隱藏的代碼。
public class SuperSon extends Object{
SuperSon(){
super();//這就是一段默認隱藏代碼
System.out.println("this is super son");
}
//整個構(gòu)造方法也是一段默認隱藏代碼
}
如同編譯類時編譯器回去檢查extends關(guān)鍵字一樣,編譯器會首先檢查是否存在constructor,如果沒有,默認增加ClassName()構(gòu)造方法。
在構(gòu)造方法內(nèi)部,編譯器會檢查第一行代碼是否為super構(gòu)造方法,如果不是,默認添加super()
這個就是為什么 new一個對象的時候,首先調(diào)用的是父類的構(gòu)造方法。
一個錯誤代碼示例:
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");
}
}
嘿嘿 第一篇文章