在沒有有參構造方法時,所建類中是有乙個預設無參構造方法的,所以子類son中新創乙個物件,執行結果會顯示父類中的那個構造方法。那為什麼會顯示父類構造方法呢?原因如下
把子類中那個預設的無參構造方法顯示出來:右鍵——sources——gene—generate constructors from superclass——enter,就會出現下圖中的無參構造方法
super()講解
1、super()呼叫的是父類構造方法,這就解釋了上面結果為什麼會是圖示那樣
父類構造方法中的super()呼叫的是object類中的構造方法
2、super()呼叫父類構造方法,該行**必須放在有效**第一行
3、如果乙個構造方法沒有呼叫本類中的其它構造方法,構造方法預設有乙個super(), 反之沒有super(),因為this必須也放有效**第一行,如果有super,必須也放第一行,然而第一行只有乙個;
但是如果被呼叫的構造方法沒有呼叫本類其它構造方法,則該構造方法有super()。
解釋上圖:從main方法出發,首先建立了乙個無參的son物件,所以呼叫本類中第乙個的那個無參構造方法,然後無參構造方法中this(12)表示呼叫了本類中的有參構造方法,所以回到下面那個public son(int age)方法,這個方法因為沒有呼叫本類其它構造方法,所以該構造方法缺省會有乙個有super(),即呼叫了父類中的構造方法,所以會先顯示「父類構造方法」,然後是public son(int age)中的「有參構造方法」,最後是this下面的「無參構造方法」
1、如果父類擁有無參構造方法(無論隱式的還是顯式的)且子類中的構造方法又沒有明確指定呼叫父類的哪個構造方法,則子類中沒有呼叫該子類其它構造方法的構造方法使用super()隱式呼叫父類的無參構造方法
2、如果父類沒有無參構造方法(無論隱式的還是顯式的),則要求子類構造方法必須直接或間接指定呼叫父類哪個構造方法並且放在有效**第一行,否則會出錯(因為無參構造方法)
super(";;");直接指定呼叫public father(string name)構造方法;this(12)間接指定呼叫public father(string name)構造方法
總之一句話:子類必須呼叫父類的構造方法
父類構造方法對子類構造方法影響
1 乙個類中如果沒有定義構造方法,預設有乙個無參構造方法,其結構如下 public 類名 其中super 關鍵字可以省略不寫,缺省會呼叫父類無參構造方法。需要注意的是,如果乙個類中定義了乙個有參構造方法,則無參構造方法不再贈送,需要自行編寫。2 this 引數列表 呼叫本類構造方法,但必須放在有效 ...
父類構造方法對子類構造方法影響
乙個類中如果沒有構造方法,預設有乙個無參構造方法,其結構為 public 類名 建立乙個父類與子類 父類 public class father 子類 public class sonextends father public class test 則此時輸出結果為 父類構造方法 子類構造方法。若構...
父類構造方法對子類構造方法的影響
當乙個子類繼承它的父類時,子類除了在屬性和方法上受到父類影響,在構造方法上也會受到父類影響。首先,我們如果想在子類的構造方法中呼叫父類的構造方法,應該用super 如下 父類 public class father 子類 但是如果我們把上段 中的super 去掉再執行,發現執行結果還是和上面一樣,這...