在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為什麼得以正確編譯。
相關詞條
-
構造方法
構造方法是一種特殊的方法,它是一個與類同名且返回值類型為同名類類型的方法。對象的創建就是通過構造方法來完成,其功能主要是完成對象的初始化。當類實例化一個...
定義 特殊性 軟道語錄 -
構造器
構造器是Java和C#學習中很重要的一個概念,構造器可以提供許多特殊的方法,構造器作為一種方法,負責類中成員變數(域)的初始化。實例構造器分為預設構造器...
分類 作用 用法 繼承方式 -
構造函式
構造函式 ,是一種特殊的方法。主要用來在創建對象時初始化對象, 即為對象成員變數賦初始值,總與new運算符一起使用在創建對象的語句中。特別的一個類可以有...
主要特點 套用 其他特點 語法 記憶體機制 -
複製構造函式
hyon hyon hyon
-
java 構造函式
構造函式是一種特殊的函式。其主要功能是用來在創建對象時初始化對象, 即為對象成員變數賦初始值,總與new運算符一起使用在創建對象的語句中。構造函式與類名...
名詞解釋 特點 構造函式的調用 執行過程 不同之處 -
構造線
構造線是區域性構造在地面上的延伸線,如褶皺軸跡、大的斷層線、區域性片理或劈理的走向線等。平行造山帶或橫切造山帶走向的巨大而延伸很遠的斷層線或斷裂帶。
-
靜態方法
C++中,若類的方法前加了static關鍵字,則該方法稱為靜態方法,反之為實例方法。靜態方法為類所有,可以通過對象來使用,也可以通過類來使用。但一般提倡...
定義 方法使用 經典案例 優勢與弊端 -
遠程方法調用
Raza Microelectronics, Inc.(RMI公司)是勇於創新的信息基礎架構半導體解決方案領導廠商,其產品廣泛地被套用於改善不斷演進的信...
公司介紹 方法調用 指示器介紹