Day 5 面向對象
面向對象思想
程式是為了模拟現實世界,解決現實問題而使用計算機語言編寫指令集合。
一切客觀存在的事物都是對象。萬物皆對象
任何對象,一定具有自己的屬性(特征)和方法(行為)。
類是對象的模闆,對象是類的執行個體
類:定義了對象應具有的特征和行為,類是對象的模闆。
對象:擁有多個特征和行為的實體,對象是類的執行個體。
類的定義
屬性:通過變量0表示,又稱執行個體變量。
文法:資料類型 屬性名;
位置:類的内部,方法的外部。
方法:通過函數表示,又稱執行個體方法。
文法:
public 傳回值類型 方法名(形參){
//方法的主體
}
執行個體變量
執行個體變量不指派時有預設值
執行個體變量類型 | 預設值 |
---|---|
整數 | |
小數 | 0.0 |
字元 | \u0000(空格) |
布爾 | false |
其他 | null |
執行個體變量與局部變量的差別
局部變量 | 成員變量 |
---|---|
定義位置 | 方法或方法内的結構當中 |
預設值 | 無預設值 |
使用範圍 | 從定義行到包含其結構結束 |
命名沖突 | 不允許重名 |
執行個體方法
方法的聲明:
代表對象能做什麼。
組成:修飾符 傳回值類型 方法名(形參清單)
方法的實作:
代表對象怎麼做,即如何實作對應的功能。
組成:{ }
方法重載
方法重載概念
在一些情況下,對象的同一種行為可能存在多種實作過程。
重載:一個類中定義多個相同名稱的方法。
要求: 方法名稱相同。
參數清單不同(類型、個數、順序)。
與通路修飾符、傳回值類型無關。
調用帶有重載的方法是,需要根據傳入的實參去找到與之比對的方法。
好處:屏蔽使用差異,靈活、友善。
構造方法
類中的特殊方法,主要用于建立對象。
特點: 名稱與類名完全相同。
沒有傳回值類型。
建立對象時,觸發構造方法的調用,不可通過句點手動調用。
注意:如果沒有在類中顯示定義構造方法,則編譯器預設提供無參構造函數。
對象建立過程
new Student() 觸發對象建立(即會調用構造方法)
1、記憶體中開辟對象空間
2、為各個屬性賦予初始值
3、執行構造方法中的代碼
4、将對象的位址指派給變量
對象的記憶體配置設定
存儲對象的變量中儲存對象的位址,通過變量中的位址通路對象的屬性和方法。
構造方法重載
構造方法也可以重載,遵循重載規則。
建立對象時,根據傳入參數,比對對應的構造方法。
預設構造方法
在類中,如果沒有顯示定義構造方法,則編譯器預設提供無參構造方法。
如已手動添加有參構造方法,則無參構造方法不再預設提供,可根據需求自行添加。
綜上,為了避免忘記寫無參構造函數,故無參構造函數全部顯示書寫。
this關鍵字
類是模闆,可服務于此類的所有對象;
this是類中的預設引用,代表目前執行個體;
當類服務于某個對象時,this則指向這個對象。
this的第一種用法:
調用執行個體屬性、執行個體方法。如:this.name、this.sayHi();
this的第二種用法:
調用本類中的其他構造方法。如:this()、this(實參)
加注:
在調用執行個體變量時,如果執行個體變量不與其它任何變量重名時,this . 字首隐式存在。但若有重名時,局部變量優先,this . 字首不再隐式存在,需顯示書寫來來調用執行個體變量。