top
Loading...
JAVA技術專題綜述之構造方法篇

類的繼承機制使得子類可以使用父類的功能(即代碼),并且子類也具有父類的類型。下面介紹類在繼承關系上的初始化的順序問題。

示例1:

 

 

 

 

class SuperClass
{
SuperClass()
{
System.out.println("SuperClass constructor");
}
}
public class SubClass extends SuperClass
{
SubClass()
{
System.out.println("SubClass constructor");
}
public static void main(String[] args)
{
SubClass sub = new SubClass();
}
}
輸出結果: SuperClass
constructor
SubClass constructor

在子類中只實例化了一個子類對象。從輸出結果上看,程序并不是一開始就運行自己的構造方法,而是先運行其父類的默認構造方法。注意:程序自動調用其父類的默認構造方法。

示例2:

class SuperClass
{
SuperClass(String str)
{
System.out.println("Super with a string.");
}
}
public class SubClass extends SuperClass
{
SubClass(String str)
{
System.out.println("Sub with a string.");
}
public static void main(String[] args)
{
SubClass sub = new SubClass("sub");
}
}

在JDK下編譯此程序不能成功。正如上例中說的:程序在初始化子類時先要尋找其父類的默認構造方法,結果沒找到,那么編譯自然不能通過。

解決這個問題有兩個辦法:

1.在父類中增加一個默認構造方法。
2.在子類的構造方法中增加一條語句:super(str); 且必須在第一句。

這兩種方法都能使此程序通過編譯,但就本程序來說運行結果卻不相同。

第1種方法的運行結果是:

Sub with a string.

第2種方法的運行結果是:

Super with a string.
Sub with a string.

第2種解決方法實際上是指定編譯器不要尋找父類的默認構造方法,而是去尋找帶一個字符串為參數的構造方法。

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗