當乙個子類繼承它的父類時,子類除了在屬性和方法上受到父類影響,在構造方法上也會受到父類影響。
首先,我們如果想在子類的構造方法中呼叫父類的構造方法,應該用super(),**如下:
//父類
public class father
}//子類
但是如果我們把上段**中的super()去掉再執行,發現執行結果還是和上面一樣,這是因為子類的構造方法中會預設呼叫父類的無參構造方法,但前提是子類的該構造方法中沒有呼叫本類中的其他構造方法。這種呼叫super()的方式叫直接呼叫。
那麼當子類的該構造方法中呼叫了本類中的其他構造方法時,預設的super便失效了,但是建立物件的時候發現還是呼叫了父類的無參構造方法:
//父類
public class father
}//子類
當子類中無參構造方法中呼叫了本類中另乙個構造方法時,預設的super()理應失效,因為super()和this()都需要放在有效**行的第一行,而構造方法中不可能有兩個第一行,所以預設的super()理應失效。但是含引數的構造方法中預設有super(),這時無參構造方法呼叫含引數的構造方法,含引數的構造方法再用預設的super()去呼叫父類的構造方法,這種呼叫方式就叫間接呼叫。
父類中沒有無參構造方法時,子類的構造方法就沒法通過預設的super()去呼叫了,這時必須在super()中指定呼叫的是父類的哪乙個構造方法,如下:
//父類
public class father
}//子類
public class son extends father
public son(int a)
public static void main(string args)
}
當父類中自定義了乙個有參構造方法時,預設的無參構造方法失效,這時在子類的構造方法中必須要呼叫父類中存在的構造方法
用一句話總結父類構造方法對子類構造方法的影響就是,子類構造方法必須呼叫父類的構造方法,無論是直接呼叫還是間接呼叫,不呼叫便會報錯。
父類構造方法對子類構造方法影響
1 乙個類中如果沒有定義構造方法,預設有乙個無參構造方法,其結構如下 public 類名 其中super 關鍵字可以省略不寫,缺省會呼叫父類無參構造方法。需要注意的是,如果乙個類中定義了乙個有參構造方法,則無參構造方法不再贈送,需要自行編寫。2 this 引數列表 呼叫本類構造方法,但必須放在有效 ...
父類構造方法對子類構造方法影響
乙個類中如果沒有構造方法,預設有乙個無參構造方法,其結構為 public 類名 建立乙個父類與子類 父類 public class father 子類 public class sonextends father public class test 則此時輸出結果為 父類構造方法 子類構造方法。若構...
父類構造方法對子類構造方法的影響
此時有子類在繼承父類時,第五行被注釋掉的 無論寫還是不寫,都會呼叫父類的無參構造方法。現在我們先看如下 package com.jd.service public class father package com.jd.service public class son extends father ...