1. 程式人生 > >關於繼承中的super()調用父類構造方法

關於繼承中的super()調用父類構造方法

顯示 調用 his 一個 子類 順序 color col 調用父類

super

super可以理解為是指向自己超(父)類對象的一個指針,而這個超類指的是離自己最近的一個父類。

每當你new一個子類對象的時候,子類對象都隱式內置了一個父類對象。
所以說,為了那個內置的父類對象,也需要進行初始化。

因為這個父類對象需要初始化,所以必須調用構造方法進行初始化,什麽時候調用構造方法呢?

在子類的構造方法裏面調用super,如果父類中含有無參構造方法,子類構造方法會隱式調用了一句super(),因此對於無參構造函數,super()可寫,可不寫,

如果父類裏面沒有定義參數為空的構造函數,那麽必須在子類的構造函數的第一行顯示的調用super(參數);語句調用父類當中其它的構造函數。

子類對象調用父類方法

當一個類繼承於另一個類,子類中沒有父類的方法時。用子類的對象調用方法時,會首先在子類中查找,如果子類中沒有改方法,再到父類中查找。
當一個方法只在父類中定義時,調用該方法時會使用父類中的屬性。
如果該方法中又調用了其他方法,那麽還是按照之前的順序,先在子類中查找,再在父類中查找。

1、為什麽在實例化子類的對象的時候會調用先調用父類的構造函數?

答:因為子類繼承父類之後,獲取到了父類的內容(屬性/字段),而這些內容在使用之前必須先初始化,所以必須先調用父類的構造函數進行內容的初始化.

2、在什麽地方調用基類的構造函數?

答:在子類的構造函數中,如果無參數,的第一行會隱士的調用 super();子句,即調用了父類的構造函數

如果父類裏面沒有定義參數為空的構造函數,那麽必須在子類的構造函數的第一行顯示的調用super(參數);語句調用父類當中其它的構造函數.

如果子類當中的構造函數的第一行寫了this();那麽就隱士的那個super();語句就會消失..因為super()和this()都只能定義在構造函數的第一行.

關於繼承中的super()調用父類構造方法