繼承環境下的構造方法呼叫

2021-09-19 16:50:37 字數 1031 閱讀 3755

我們都知道如果初始化乙個子類,一定會先初始化父類,即呼叫父類的構造方法,再呼叫子類的構造方法,但是如果父類有很多的構造方法,那麼呼叫哪乙個呢?看下面的例子:

package io;

public class constructortest

}class a

public a(int i)

}class b extends a

public b(int i)

}

output:

a no params

b has params

可以看到呼叫了父類的預設構造方法,為了驗證如果將a的無引數的構造方法注釋掉,則new b的時候會報錯,

class a 

*/ public a(int i)

}

implicit super constructor a() is undefined. must explicitly invoke another constructor
而如果這時候將a的兩個構造方法都注釋掉,卻又不報錯了:

class a 

*/ /*public a(int i) */

}

這是因為如果a中沒有構造方法,那麼會預設給它建立乙個無引數的構造方法。而如果有其它的構造方法了,就不會給它建立了。

所以說子類預設呼叫的是父類的無引數的構造方法,或者當父類確實沒有無引數的構造方法時,還可以通過super來呼叫它的其它構造方法:

class a 

*/ public a(int i)

}class b extends a

public b(int i)

}

注意:如果要顯式的呼叫super,那麼必須把它放在第一位。如果不放在第一位,那麼super之前的初始化語句等於是沒有執行,因為在super中還得重新初始化,這顯然不符合情理、

繼承條件下構造方法的呼叫規則

1 如果子類的構造方法中沒有通過super顯式呼叫父類的有參構造方法,也沒有通過this顯式呼叫自身的其他構造方法,則系統會預設先呼叫父類的無參構造方法。在這種情況下,寫不寫 super 語句,效果是一樣的 2 如果子類的構造方法中通過super顯式呼叫父類的有參構造方法,那將執行父類相應構造方法,...

繼承條件下構造方法的呼叫規則

1 如果子類的構造方法中沒有通過super顯式呼叫父類的有參構造方法,也沒有通過this顯式呼叫自身的其他構造方法,則系統會預設先呼叫父類的無參構造方法。在這種情況下,有沒有 super 語句,效果都是一樣的。2 如果子類的構造方法中通過super顯式呼叫父類的有參構造方法 則將執行父類相應的構造方...

Java構造方法的繼承呼叫

1.對於父類含有引數建構函式的方法,子類可以通過在自己構造方法中使用super關鍵字來呼叫,但是super必須是第乙個可執行語句 2.父類無參建構函式一定被呼叫 class father public father int x public void sub 1 public class son e...