如果我們定義一個(gè)與類名相同的函數(shù)就是構(gòu)造函數(shù),我們可以在一個(gè)類中定義多個(gè)構(gòu)造函數(shù),但是這些構(gòu)造函數(shù)的列表參數(shù)必須不同(個(gè)數(shù)或者數(shù)據(jù)類型)。如果我們沒有定義一個(gè)構(gòu)造函數(shù),系統(tǒng)就會(huì)給這個(gè)類定義一個(gè)默認(rèn)的構(gòu)造函數(shù),這個(gè)構(gòu)造函數(shù)沒有參數(shù)。如果我們定義了構(gòu)造函數(shù)那么系統(tǒng)定義的構(gòu)造函數(shù)就會(huì)被覆蓋。下面用程序來說明。
程序1:
class YuanGong{
private int id;
private String name;
private float salary;
private String depart;
public void say(){
System.out.println("員工號(hào):"+'\t'+id);
System.out.println(" 姓名:"+'\t'+name);
System.out.println(" 薪水:"+'\t'+salary);
System.out.println(" 部門:"+'\t'+depart);
}
public void setId(int id){
this.id=id;
}
public int getId(){
return id;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setSalary(float salary){
this.salary=salary;
}
public float getSalary(){
return salary;
}
public void setDepart(String depart){
this.depart=depart;
}
public String getDepart(){
return depart;
}
}
public class Test1{
public static void main(String args[]){
YuanGong p=new YuanGong();
p.say();
p.setId(50);
p.setName("哈哈");
p.setSalary(2000);
p.setDepart("商務(wù)");
p.say();
}
}
上面程序的輸出結(jié)果如下圖所示:

我們看到在程序并沒有定義構(gòu)造函數(shù)YuanGong(),這是系統(tǒng)定義的,而且還沒有參數(shù)。
程序2:
class YuanGong{
private int id;
private String name;
private float salary;
private String depart;
YuanGong(int id){
this.setId(id);
this.setName("未確定");
this.setSalary(1000);
this.setDepart("后勤");
}
YuanGong(int id,String name){
this.setId(id);
this.setName(name);
this.setSalary(3000);
this.setDepart("技術(shù)");
}
YuanGong(int id,String name,float salary,String depart){
this.setId(id);
this.setName(name);
this.setSalary(salary);
this.setDepart(depart);
}
YuanGong(){
}
public void say(){
System.out.println("員工號(hào):"+'\t'+id);
System.out.println(" 姓名:"+'\t'+name);
System.out.println(" 薪水:"+'\t'+salary);
System.out.println(" 部門:"+'\t'+depart);
}
public void setId(int id){
this.id=id;
}
public int getId(){
return id;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setSalary(float salary){
this.salary=salary;
}
public float getSalary(){
return salary;
}
public void setDepart(String depart){
this.depart=depart;
}
public String getDepart(){
return depart;
}
}
public class Test2{
public static void main(String args[]){
YuanGong p1=null;
YuanGong p2=null;
p1=new YuanGong(10);
p2=new YuanGong(20,"張三");
p1.say();
p2.say();
p1=new YuanGong(30,"李四",5000,"財(cái)政");
p2=new YuanGong();
p1.say();
p2.say();
}
}
此程序的輸出結(jié)果如下圖所示:

在此程序中我們定義了四個(gè)構(gòu)造函數(shù),分別是單參、雙參、四參和沒有參數(shù)。我們可以看到最后沒有參數(shù)的構(gòu)造函數(shù)的結(jié)果和程序1初始化的結(jié)果一樣。
看程序3:
class YuanGong{
private int id;
private String name;
private float salary;
private String depart;
YuanGong(int id){
this.setId(id);
this.setName("未確定");
this.setSalary(1000);
this.setDepart("后勤");
}
YuanGong(int id,String name){
this.setId(id);
this.setName(name);
this.setSalary(3000);
this.setDepart("技術(shù)");
}
YuanGong(int id,String name,float salary,String depart){
this.setId(id);
this.setName(name);
this.setSalary(salary);
this.setDepart(depart);
}
public void say(){
System.out.println("員工號(hào):"+'\t'+id);
System.out.println(" 姓名:"+'\t'+name);
System.out.println(" 薪水:"+'\t'+salary);
System.out.println(" 部門:"+'\t'+depart);
}
public void setId(int id){
this.id=id;
}
public int getId(){
return id;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setSalary(float salary){
this.salary=salary;
}
public float getSalary(){
return salary;
}
public void setDepart(String depart){
this.depart=depart;
}
public String getDepart(){
return depart;
}
}
public class Test3{
public static void main(String args[]){
YuanGong p1=null;
YuanGong p2=null;
p1=new YuanGong(10);
p2=new YuanGong(20,"張三");
p1.say();
p2.say();
p1=new YuanGong(30,"李四",5000,"財(cái)政");
p2=new YuanGong();
p1.say();
p2.say();
}
}
這個(gè)程序編譯的時(shí)候就會(huì)出現(xiàn)如下圖所示的錯(cuò)誤:

程序3與程序2的區(qū)別就是少了一個(gè)無參的構(gòu)造函數(shù),這樣做就驗(yàn)證了“如果類中定義了新的構(gòu)造函數(shù)就會(huì)覆蓋系統(tǒng)定義的構(gòu)造函數(shù)”。程序2同樣也覆蓋了系統(tǒng)定義的構(gòu)造函數(shù)只不過我們又新建了一個(gè)無參的構(gòu)造函數(shù),這就造成了程序2中無參函數(shù)的輸出結(jié)果與程序1初始化的輸出結(jié)果相同。