1. 程式人生 > >java中類的構造方法與預設構造方法的關係

java中類的構造方法與預設構造方法的關係

先看程式碼1:

class Demo_11 {


public static void main(String[] args) {
A a= new A();
a.print();
}
}
class A{
String s;
public void print(){
System.out.println(s);
}
}

程式碼2:

class Demo_11 {


public static void main(String[] args) {
A a= new A();
a.print();
}
}
class A{
String s;
A(){

}
A(String s){
this.s=s;
}
public void print(){
System.out.println(s);
}
}

執行結果都為null;   但是如果我們將程式碼2中類A的構造方法A刪掉就會報錯,是什麼原因導致這樣的問題呢?是因為程式碼2中類A的構造方法A(String)把類A的預設構造方法覆蓋了,所以在主函式建立物件時用的構造方法是預設構造方法,這樣就與類A中的構造方法不一致了,所以會報錯。因此如果我們在建立物件時要注意,類的構造方法是否被過載了。

注意:如果一個類要設計為擴充套件的。最好提供一個無參構造方法以避免程式設計錯誤,如以下程式碼

public class A extends B{

}

class B{

public B(String name){

System.out.println("A and B");

}

}

由於在A中沒有顯示的定義構造方法,因此,A的預設無參構造方法被隱式的呼叫,因為A是B的子類,所以A的預設構造方法會自動的呼叫B的無參構造方法,然而B沒有無參構造方法,因為B顯示的定義了構造方法,因此,程式不能被編譯。

最好能為每一個類提供一個無參構造方法(如需要的話),以便於對該類進行擴充套件同時避免錯誤。

以上是個人學習JAVA的一些小心得,如若有錯,歡迎探討