【本節目标】
通過閱讀本節内容,你将了解到繼承類執行個體化的秘密,并能夠通過一定的邏輯在父子類中實作簡單的開發。
子類對象執行個體化流程
現在已經成功實作了繼承關系,并且也已經發現了繼承主要特點,但是一旦程式之中提供有繼承邏輯,那麼對與子類對象的執行個體化定義是有要求的。從正常的社會邏輯來講:沒有父親一定沒有孩子。對于繼承程式的邏輯也是一樣的,在進行子類對象執行個體化的時候一定要首先執行個體化好父類對象。
範例:觀察一個程式
class Person {
public Person() {
System.out.println(“【Person父類】一個新的Person父類執行個體化對象産生了。”) ;
}
}
class Student extends Person { //student是子類
public student() {} //構造方法
System.out.println(“【Student子類】一個新的Student執行個體化對象産生了。”) ;
}
public class JavaDemo{
public static void main(String args[]) {
new Student() ; //執行個體化子類對象
}
}
程式執行結果:
【Person父類】一個新的Person父類執行個體化對象産生了。
【Student子類】一個新的Student執行個體化對象産生了。
現在即使沒有進行父類對象執行個體化,也會由系統自動調用父類的構造方法(執行個體化父類對象),預設情況下的子類對象執行個體化流程會自動執行個體化父類對象。實際上就相當于子類的構造方法裡面隐含了一個“super()”的形式。
範例:修改子類定義
class Student extends Person { //student是子類
public student() {} //構造方法
super() ; //寫與不寫此語句效果一樣
System.out.println(“【Student子類】一個新的Student執行個體化對象産生了。”) ;
}
super()表示的就是子類調用父類構造的語句,該語句隻允許放在子類構造方法的首行。在預設情況下的執行個體化處理,子類隻會調用父類中的無參構造方法,是以寫與不寫“super()”差別不大,但是如果父類中沒有提供無參構造,這時就必須利用super()明确調用有參構造。
class Person {
private String name ;
private int age ;
public Person(String name ,int age) {
this.name = name ;
this.age = age ;
}
}
class Student extends Person { //student是子類
private String school ;
public student(String name , int age ,String school) { //構造方法
super(name ,age) ; //明确調用父類構造
this.school = school ;
}
}
public class JavaDemo{
public static void main(String args[]) {
new Student(“林小強”, 48 ,”北京大學”) ; //執行個體化子類對象
}
}
結論:無論怎樣,在執行個體化子類對象的同時一定會執行個體化父類對象,目的是對了所有的屬性可以進行空間配置設定。
super與this都可以調用構造方法,super是由子類調用父類的構造,而this是調用本類構造,并且都一定要放在構造方法的首行,是以兩個語句不允許同時出現。
想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。
本内容視訊來源于
阿裡雲大學 下一篇:方圓之内-繼承相關限制 | 帶你學《Java面向對象程式設計》之三十八 更多Java面向對象程式設計文章檢視此處