class Student extends Person{ int grade; Student(){ //super(); 默認(rèn)添加 System.out.println("Student的無(wú)參數(shù)構(gòu)造函數(shù)"); } Student(int age,String name,int grade){ //this.age = age; 與父類中的代碼重復(fù) //this.name = name; super(age,name); //調(diào)用父類的構(gòu)造函數(shù) this.grade = grade; }}class Test{ public static void main(String args[]){ Student s2 = new Student(); Student s1 = new Student(18,"zhangsan",3); }}
在子類的構(gòu)造函數(shù)當(dāng)中,必須調(diào)用父類的構(gòu)造函數(shù)。如果子類構(gòu)造函數(shù)里沒(méi)有明確調(diào)用父類的構(gòu)造函數(shù),編譯器會(huì)自動(dòng)添加super(); 根據(jù)括號(hào)內(nèi)傳入的參數(shù)來(lái)調(diào)用具體的父類構(gòu)造函數(shù)(與this類似)。
為什么??
由于子類繼承了父類中的成員變量和成員函數(shù),但無(wú)法繼承構(gòu)造函數(shù)。在子類的構(gòu)造函數(shù)中給父類的成員變量賦值時(shí)必然會(huì)產(chǎn)生重復(fù)代碼,使用super關(guān)鍵字來(lái)調(diào)用父類中的構(gòu)造函數(shù)解決此問(wèn)題。
當(dāng)使用super來(lái)調(diào)用父類中的構(gòu)造函數(shù)時(shí),這行代碼必須是第一條語(yǔ)句。