資源描述:
《java繼承時構(gòu)造函數(shù)的調(diào)用》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、·Java繼承時構(gòu)造函數(shù)的調(diào)用classPerson{privateStringname="";privateintage=0;publicPerson(){??System.out.println("person無參數(shù)構(gòu)造函數(shù)");}publicPerson(Stringname,intage){??this.name=name;??this.age=age;??System.out.println("person2參數(shù)的構(gòu)造函數(shù)");??}}classStudentextendsPerson{privateStringschool;priva
2、teStringgrade;publicStudent(){??System.out.println("student無參數(shù)的構(gòu)造函數(shù)");}publicStudent(Stringname,intage,Stringschool){??System.out.println("student3參數(shù)的構(gòu)造函數(shù)");}???public??Student(Stringname,intage,Stringschool,Stringgrade){??super(name,age);??this.school=school;??this.grade=gra
3、de;??System.out.println("student4參數(shù)的構(gòu)造函數(shù),super().");}}classTest{publicstaticvoidmain(String[]args){??System.out.println("st1:");??Studentst2=newStudent();?????System.out.println("---------------------------");???????System.out.println("st2:");??Studentst=newStudent("zhangshan
4、",76,"武大");??System.out.println("---------------------------");????System.out.println("st3:");??Studentst3=newStudent("lisi",24,"武大","研究生");}}?/*=======================================輸出如下:E:JavaWork>javaTestst1:person無參數(shù)構(gòu)造函數(shù)student無參數(shù)的構(gòu)造函數(shù)---------------------------st2:pers
5、on無參數(shù)構(gòu)造函數(shù)student3參數(shù)的構(gòu)造函數(shù)---------------------------st3:person2參數(shù)的構(gòu)造函數(shù)student4參數(shù)的構(gòu)造函數(shù),super().**************************************???說明了創(chuàng)建一個子類的對象實(shí)例的時候,必先調(diào)用父類的無參數(shù)的構(gòu)造函數(shù)(默認(rèn)構(gòu)造函數(shù)),假如父類有帶參數(shù)的構(gòu)造函數(shù),那么系統(tǒng)將不會給它創(chuàng)建無參數(shù)的構(gòu)造函數(shù),這時,子類在實(shí)例化的時候,因?yàn)檎也坏礁割惖哪J(rèn)構(gòu)造函數(shù),編譯器將會報錯,但如果在子類的構(gòu)造函數(shù)中指定用父類的帶參數(shù)的構(gòu)造函數(shù)的時候,
6、或者在父類中加一個無參數(shù)的構(gòu)造函數(shù),就不會報錯。=============================================我們假設(shè)A是B的父類,B是A的子類。1、如果程序員沒有給類A沒有提供構(gòu)造函數(shù),則編譯器會自動提供一個默認(rèn)的無參數(shù)的構(gòu)造函數(shù),如果用戶提供了自己的構(gòu)造函數(shù),則編譯器就不在提供默認(rèn)的無參數(shù)構(gòu)造函數(shù)。2、子類B實(shí)例化時會自動調(diào)用父類A的默認(rèn)構(gòu)造函數(shù),所以如果A的默認(rèn)的無參數(shù)的構(gòu)造函數(shù)為private,則編譯器會報錯,而如果A沒有提供默認(rèn)的無參數(shù)的構(gòu)造函數(shù),而提供了其他類型的構(gòu)造函數(shù),編譯器同樣會報錯,因?yàn)锽找不到A的
7、默認(rèn)無參數(shù)構(gòu)造函數(shù)。所以,我們最好給父類A提供一個無參數(shù)的構(gòu)造函數(shù)。?3、或者在B的構(gòu)造函數(shù)中顯示的調(diào)用父類A的有參構(gòu)造函數(shù)。super(parameter)