默認構造方法

默認構造方法

1、默認構造方法
在java語言中,每個類至少有一個構造方法。如果程式中沒有顯式定義任何構造方法,
那么java語言將自動提供一個隱含的默認構造方法。只要程式中已經顯式定義了構造方法。
那么java語言將不再提供隱含的默認構造方法。
//實例1
class Base
{
Base(int i) { System.out.println("Base("+i+")"); }
}
class Sub extends Base
{
Sub() { System.out.println("Sub()"); }
Sub(int i)
{
System.out.println("Sub("+i+")");
}
public static void main(String[] args)
{
}
}
/*output:
z.java:9: 找不到符號
符號: 構造函式 Base()
位置: 類 Base
Sub() { System.out.println("Sub()"); }
^
z.java:11: 找不到符號
符號: 構造函式 Base()
位置: 類 Base
{
^
2 錯誤
*/
通過分析以上編譯錯誤,原因是Base父類缺少默認構造方法,正因為Base父類定義了帶參數的構造方法,以至於java語言將不再提供隱式的默認構造方法,所以代碼無法通過編譯。
//實例2
class Base
{
Base(int i) { System.out.println("Base("+i+")"); }
}
class Sub extends Base
{
Sub()
{
super(8);
System.out.println("Sub()");
}
Sub(int i)
{
super(9);
System.out.println("Sub("+i+")");
}
public static void main(String[] args)
{
}
}
情況變得撲朔迷離起來,雖然Base父類沒有顯式提供無參數的默認構造方法,
而java語言也不會提供隱式的默認構造方法,但以上代碼竟然正常編譯通過了。
2、構造方法的顯式與隱式調用
如果子類的構造方法中沒有顯式地調用父類構造方法,也沒有使用this關鍵字調用其他重載構造方法,
那么在生成子類的實例對象時,系統將默認調用父類無參數的構造方法。
看看真實的實例1代碼:
class Base
{
Base(int i) { System.out.println("Base("+i+")"); }
}
class Sub extends Base
{
Sub()
{
super();
System.out.println("Sub()");
}
Sub(int i)
{
super();
System.out.println("Sub("+i+")");
}
public static void main(String[] args)
{
}
}
原來隱式調用的super();被省略了,這下也就知道了實例2為什麼得以正確編譯。

相關詞條

熱門詞條

聯絡我們