Java------------------------面向對象(待完善)

一、面向對象
1、程序的概念:
程序是爲了模擬現實世界,解決現實問題而使用的計算機語言編寫的指令集合。
2、對象:
一切客觀存在的事物都是對象,萬物皆對象。
3、任何對象一定有自己的特徵和行爲。
4、特徵和行爲:特徵即屬性,行爲即方法。
5、類與對象的關係:
類:定義了對象應具有的特徵和行爲,類是對象的模板。
對象:擁有多個特徵和行爲的實體,對象是類的實例。
二、方法重載
概念:在一個類中定義了多個相同名稱的方法。
要求:1.方法名稱相同 2.參數列表不同 3.與訪問修飾符、返回值無關。

class dog{
	public void eat(){
	System.out.pringtln("狗吃");
	}
	public void eat(int i){
	System.out.pringtln("狗吃了"+i+"斤狗糧");
	}
	public void eat(int i ,String name){
	System.out.pringtln("一個叫"+name+"的狗吃了"+i+"斤狗糧");
	}
}

三、構造方法
1.概念:類中特殊的方法,主要用於創建對象。
2.特點:
(1)名稱與類名完全相同,包括大小寫。
(2)沒有返回值類型
(3)創建(new)對象時,觸發構造方法的調用,不可通過點“.”的形式手工調用。

public class Review {
	public Review(){
		System.out.println("這是無參構造");
	}
	
	public Review(String  name){
		System.out.println("這是有參構造");
	}
}

3.注意:
(1)如果在類中沒有顯示定義過構造方法,則編譯器默認提供無參構造方法。
(2)如果已經手動添加過有參構造方法,則無參構造方法不再默認提供,可結合需求自行添加(建議手動添加無參構造)
四、this關鍵字
I. this代表“當前實例”,即是模板中的當前對象,模板服務與哪個對象,this就指向哪個對象。
II. this第一種用法:調用***本類中的實例屬性、實例方法***。例如:this.name、this.run() ,
III. this第二種用法:調用***本類中的其他構造方法***。例如:this()、this(實參)。注意:必須在構造方法的首行。
IV. 默認來講,實例屬性和方法前的this.隱式存在
五、三大特性
(一)封裝
I. 概念:儘可能隱藏對象的內部實現細節,控制對象的修改及訪問的權限。
II. private的訪問修飾符,修飾屬性,達到本類可見的效果。
III. get/set方法是外界訪問私有屬性的唯一通道,方法內部可對數據進行過濾。(可在set方法中添加過濾條件)
IV. 提供公共訪問方法,以保證數據可以正常錄入。
(二)繼承
I. 程序中的繼承,是類與類之間特徵和行爲的一種贈與或獲得。
II. 類與類之間必須滿足“is a”的關係。
III. 父類的選擇:功能越精細,重合點越多的,越接近直接父類。
IV. 父類的抽象:根據程序需要使用到的多個具體類,進行共性的提取,進而定義父類。
V. 在一組相同或類似的類中,抽取出共性的特徵和行爲,定義在父類中,實現重用。
VI. 產生繼承關係之後,子類可以使用父類中的屬性和方法,也可定義子類獨有的屬性和方法。
VII. 完整的子類 = 父類共性 + 子類獨有
VIII. 好處:既提高代碼的複用性,又提高代碼的可擴展性。
IX. Java爲單繼承,一個類只能有一個直接父類,但可以多級繼承,屬性和方法逐級疊加。
XI. 不可繼承:
1). 父類的構造方法,子類不可繼承。
2). 父類中由private修飾的成員,不可繼承(不可見)。
3). 父類中由default修飾的成員,子類不在同包時,不可繼承(不可見)。
XII. 方法的覆蓋/重寫(Override)
1). 當父類提供的方法無法滿足子類需求時,可以在子類中定義和父類相同的方法進行覆蓋。
2). 要求:
a). 方法名、參數表、返回值,必須與父類完全相同。
b). 訪問修飾符應與父類相同或比父類更寬泛。
3). 執行機制:子類覆蓋父類方法後,優先執行子類覆蓋後的方法版本。
3. super關鍵字:
I. 第一種用法:在子類中,可以通過" super. "的形式訪問父類的屬性和方法,可解決一定的屬性遮蔽、方法覆蓋後的父類成員調用問題。
II. 第二種用法:super() 表示在子類構造方法的首行,調用父類的無參構造方法。
4. 繼承關係下的對象創建:
I. 繼承關係下,構建子類對象時,會先構建父類對象。
II. 由“父類共性”+ “子類獨有”組合成一個完整的子類對象。
5. 繼承關係下的對象創建流程:
I. 構建父類對象
II. 初始化自身屬性
III. 執行自身構造方法中的邏輯代碼
6. 注意:
I. 如果子類構造方法中,沒有顯示定義super()或super(實參),則默認提供super()。
II. 同一個子類構造方法中,super()、this()不可同時存在。

(三)多態:
I. 概念:父類引用指向子類對象,從而產生多種形態。
II. 構成多態的前提,二者之間必須具有直接或間接的繼承關係,父類引用可指向子類對象,進而形成多態。
III. 父類引用僅可調用父類中所聲明的屬性和方法,不可調用子類獨有的屬性和方法。
IV. 多態兩種應用場景:
a). 使用父類作爲方法形參,實現多態。
調用方法時,可傳遞的實參類型包括:本類型對象+其所有的子類對象。
b). 使用父類作爲方法返回值,實現多態。
調用方法後,可得到的結果類型包括:本類型對象+其所有的子類對象。
V. 裝箱和拆箱:
1). 裝箱:父類引用中保存真實子類對象,稱爲向上轉型(多態核心概念)。
2). 拆箱:將父類應用中的真實子類對象,強轉回子類本身類型,稱爲向下轉型。
3). 注意:向下轉型時,如果父類引用中的子類對象的類型與目標類型不匹配,則會發生類型轉換異常。java.lang.ClassCastException
VI. instanceof關鍵字:
語法:父類引用 instanceof 類型(返回boolean類型的結果)
抽象:
通過abstract修飾類,意爲抽象類,不能new對象

  1. abstract的意思:抽象的,似是而非的,像,卻又不是,具備某種對象的特徵,但不完整。
  2. abstract修飾類,意爲“不夠完整、不夠具體,不該獨立存在”
    I. 即爲抽象類,不能獨立new對象。
    II. 可被子類繼承,對子類提供共性的屬性和方法。
    III. 可聲明引用,更純粹的使用多態。
    IV. 抽象類的構造方法的作用:構建子類對象時,先構建父類對象,由父類共性+子類獨有組成完整的子類對象。
  3. 總結:
    I. abstract修飾類:不能new對象,但可以聲明引用。
    II. abstract修飾方法:只有方法聲明,沒有方法實現。(需包含在抽象類中)
    III. 抽象類中不一定由抽象方法,但由抽象方法的類一定是抽象類。
    IV. 子類繼承抽象類之後,必須覆蓋父類當中所有的抽象方法,否則子類還是抽象類。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章