第12天面向對象

1.1 構造方法介紹:

就是對象創建時要執行的方法對象進行屬性賦值。
構造方法的格式:

修飾符 構造方法名(參數列表)
{
}

構造方法的體現:

  • 構造方法沒有返回值類型。也不需要寫返回值。因爲它是爲構建對象的,對象創建完,方法就執行結束。
  • 構造方法名稱必須和類型保持一致。
  • 構造方法沒有具體的返回值。

1.2 構造調用和內存圖解:

構造方法是專門用來創建對象的,也就是在new對象時要調用構造方法。
在創建對象時,會調用與參數列表對應的構造方法。

1.3默認構造方法和細節:

當在編譯Java文件時,編譯器會自動給class文件中添加默認的構造方法。如果在描述類時,我們顯示指定了構造方法,那麼,當在編譯Java源文件時,編譯器就不會再給class文件中添加默認構造方法。

構造方法的細節:
1、一個類中可以有多個構造方法,多個構造方法是以重載的形式存在的
2、構造方法是可以被private修飾的,作用:其他程序無法創建該類的對象。

1.4 構造方法和一般方法區別:

構造方法在對象創建時就執行了,而且只執行一次。
一般方法是在對象創建後,需要使用時才被對象調用,並可以被多次調用

2.1 this調用構造方法:

構造方法之間的調用,可以通過this關鍵字來完成。
構造方法調用格式:
this(參數列表);
構造方法的調用:

class Person {
	// Person的成員屬性
	private int age;
	private String name;

	// 無參數的構造方法
	Person() {
	}

	// 給姓名初始化的構造方法
	Person(String nm) {
		name = nm;
	}

	// 給姓名和年齡初始化的構造方法
	Person(String nm, int a) {
		// 由於已經存在給姓名進行初始化的構造方法 name = nm;因此只需要調用即可
		// 調用其他構造方法,需要通過this關鍵字來調用
		this(nm);
		// 給年齡初始化
		age = a;
	}
}

2.2 this的原理圖解:

哪個對象調用了this所在的方法,this就代表哪個對象。
調用其他構造方法的語句必須定義在構造方法的第一行,原因是初始化動作要最先執行。

2.3 成員變量和局部變量同名問題:

可以在成員變量名前面加上this.來區別成員變量和局部變量。

3.1 子父類中構造方法的調用:

在創建子類對象時,父類的構造方法會先執行,因爲子類中所有構造方法的第一行有默認的隱式super(); 語句。
格式:

調用本類中的構造方法
this(實參列表);

調用父類中的空參數構造方法
super();

調用父類中的有參數構造方法
super(實參列表);

子類會繼承父類中的內容,所以子類在初始化時,必須先到父類中去執行父類的初始化動作。這樣,纔可以使用父類中的內容。
當父類中沒有空參數構造方法時,子類的構造方法必須有顯示的super語句,指定要訪問的父類有參數構造方法。

3.2 子類對象創建過程的細節:

如果子類的構造方法第一行寫了this調用了本類其他構造方法,那麼super調用父類的語句還有嗎?
因爲this()或者super(),只能定義在構造方法的第一行,因爲初始化動作要先執行。

注意:
類中的構造方法默認第一行都有隱式的super()語句,在訪問父類中的空參數構造方法。所以父類的構造方法既可以給自己的對象初始化,也可以給自己的子類對象初始化。
如果默認的隱式super()語句在父類中沒有對應的構造方法,那麼必須在構造方法中通過this或者super的形式明確要調用的構造方法。

this super不能同時存在,任選其一,保證子類的所有構造方法調用到父類的構造方法即可。
小結論:無論如何,子類的所有構造方法,直接、間接必須調用到父類構造方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章