Java默認構造函數的作用
當new一個對象時,先判斷是否調用的構造函數有參數,
如果有參數,則根據參數的個數、類型來自動調用相應
的構造函數構造對象,分配內存,并返回對象的引用。
“如果定義了一個帶參數的構造方法后,就一定要定義一個
不帶參數的構造方法,否則就不能創建新對象(無參數)。”
因為當構造一個類的對象時,編譯器首先判斷類是否有
構造函數,如果沒有,則自動加上一個默認構造函數,
而一旦發現有構造函數后,則不再自動加上構造函數。
轉而認為你沒有用類的合法的構造函數而報出編譯錯誤。
class Person
{
private String name="";
private int age=0;
public Person()
{
System.out.println("person無參數構造函數");
}
public Person(String name,int age)
{
this.name=name;
this.age=age;
System.out.println("person 2 參數的構造函數");
}
}
class Student extends Person
{
private String school;
private String grade;
public Student()
{
System.out.println("student 無參數的構造函數");
}
public Student(String name ,int age,String school)
{
System.out.println("student 3 參數的構造函數");
}
public Student(String name ,int age,String school,String grade)
{
super(name,age);
this.school=school;
this.grade=grade;
System.out.println("student 4 參數的構造函數,super().");
}
}
class Test
{
public static void main(String [] args)
{
System.out.println("st1:");
Student st2=new Student();
System.out.println("---------------------------");
System.out.println("st2:");
Student st=new Student("zhangshan",76,"武大");
System.out.println("---------------------------");
System.out.println("st3:");
Student st3=new Student("lisi",24,"武大","研究生");
}
}
/*
=======================================
輸出如下:
E:JavaWork>java Test
st1:
person無參數構造函數
student 無參數的構造函數
---------------------------
st2:
person無參數構造函數
student 3 參數的構造函數
---------------------------
st3:
person 2 參數的構造函數
student 4 參數的構造函數,super().
**************************************
說明了創建一個子類的對象實例的時候,必先調用父類的無參數的構造函數(默認構造函數),假如父類有帶參數的構造函數,那么系統將不會給它創建無參數的構造函數,這時,子類在實例化的時候,因為找不到父類的默認構造函數,編譯器將會報錯,但如果在子類的構造函數中指定用父類的帶參數的構造函數的時候,或者在父類中加一個無參數的構造函數,就不會報錯。
=============================================
我們假設A是B的父類,B是A的子類。
1、如果程序員沒有給類A沒有提供構造函數,則編譯器會自動提供一個默認的無參數的構造函數,如果用戶提供了自己的構造函數,則編譯器就不在提供默認的無參數構造函數。
2、子類B實例化時會自動調用父類A的默認構造函數,所以如果A的默認的無參數的構造函數為private,則編譯器會報錯,而如果A沒有提供默認的無參數的構造函數,而提供了其他類型的構造函數,編譯器同樣會報錯,因為B找不到A的默認無參數構造函數。所以,我們最好給父類A提供一個無參數的構造函數。
3、或者在B的構造函數中顯示的調用父類A的有參構造函數。super(parameter
posted on 2012-04-17 11:32 計明敏 閱讀(757) 評論(0) 編輯 收藏 所屬分類: j2se