學習java時看了不少尚學堂馬士兵的視頻,還是挺喜歡馬士兵的講課步驟的,二話不說,先做實例,看到的結果才是最實際的,理論神馬的全是浮雲。只有在實際操作過程中體會理論,在實際操作過程中升華理論才是最關鍵的,產生的印象才是最深的。針對文章標題,先看一下以下代碼:
public class FatherChild {
public static void main(String[] args) {
// 主方法開始
Child c = new Child();
// 實例化
}
}
class Father {
public Father() {
System.out.println("父類無參構造函數");
}
public Father(String name) {
System.out.println("父類有參構造函數");
}
}
class Child extends Father {
public Child() {
this("dd");
System.out.println("子類無參構造函數");
}
public Child(String name) {
super("dd");
System.out.println("子類有參構造函數");
}
}
代碼運行的結果:
父類有參構造函數
子類有參構造函數
子類無參構造函數
為什么會有以上的結果呢?讓我們先了解一下java的繼承:
繼承是一種由已有的類創建新類的機制。利用繼承,可以先創建一個擁有共同屬性的一般類,根據該一般類再創建具有特殊屬性的新類。由繼承而得到的類稱為子類(Subclass),被繼承的類被稱為父類(Superclass)。
直接或間接被繼承的類都是父類。子類繼承父類的狀態和行為,同時也可以修改父類的狀態和行為,並添加新的狀態和行為。Java中不支持多重繼承。
以上代碼中Child類繼承了Father類,在FatherChild類中執行Child c = new Child();時,會調用Child類的無參構造方法,在其無參的構造方法中有這樣一句代碼:this("dd");這又是神馬意思呢?這時我們就有必要來了解一下java繼承中this與super關鍵字的作用了:
this的第一個作用
java中在一個構造方法中可以調用一次其他的構造方法,並且這條語句必須在這個構造方法的第一行,this表示調用它的對象
this的第二個作用
表示引用成員變量i(而不是形參i) 將局部變量或形參賦值給成員變量的這種情況,通常可以省略this,如寫為:i=i;
java編譯器會自動將=左邊的i當成成員變量,=右邊的當成形參。但不利於閱讀代碼
this的第三個作用
返回當前對象
super的用法與this類似,主要用於調用父類構造方法
對於繼承中的構造方法有以下說明:
1.子類的構造過程中必須調用其基類的構造方法;
2.子類可以在自己的構造方法中使用super(argument_list)調用基類的構造方法;
如果調用super,必須寫在子類構造方法的第一行;
3.如果子類的構造方法中沒有顯式調用基類構造方法,則系統默認調用基類無參數的構造方法;
4.如果子類構造方法中既沒有顯式調用基類構造方法,而基類中又沒有無參的構造方法,則編譯出錯。
那么我們就可以明白,child類中無參構造方法中的this("dd");這句代碼其實是調用了Child類中的有參構造方法,而其有參構造方法中又super(“dd”);調用了父類的有參構造方法,所以才有了以上的打印結果。
