天天看點

淺談面向對象思維面向對象:三:多态:

面向對象的三大特性:封裝性、繼承性、多态性

1.方法就是一種封裝

2.關鍵字private也是一種封裝

封裝就是将一些細節資訊隐藏起來,對于外界不可見

一旦使用了private進行修飾,那麼本類中可以随意通路,但是超出了本類的範圍就不能再通路了

可以通過間接通路的方式,自定義一對兒Getter/Setter方法,必須叫 setXxx 或者是 getXxx

對于Getter來說,不能有參數,傳回值類型和成員變量對應

對于Setter來說,不能有傳回值,參數類型和成員變量對應

布爾類型的特殊情況

當方法的局部變量和類的成員變量重名的時候,根據就近原則,優先使用局部變量,如果需要通路 本類當中的成員變量,需要使用格式:this.成員變量

通過誰調用的方法,誰就是this

構造方法是專門用來建立對象的方法,當我們使用關鍵字new來建立對象的時候,其實就是在調用構造方法

注意事項:

一個标準的類通常擁有下面的四個部分:

繼承是多态的前提,如果沒有繼承,就沒有多态

繼承解決的主要問題就是:共性抽取

定義類時的兩個注意事項:

成員變量時直接定義在類當中的,在方法外面

成員方法不要寫static關鍵字

直接通過子類對象通路成員變量

等号左邊是誰,就優先使用誰,沒有則向上找

間接通過成員方法通路成員變量

直接使用的方法中的變量

this.變量名:調用本類中的成員變量

super.變量名:調用父類中的成員變量

在父子類的繼承關系當中,建立子類對象,通路成員方法的規則:建立的對象是誰,就優先使用誰,如果沒有則向上找

注意:無論是成員方法還是成員變量,如果沒有都是向上找父類u,絕不會向下找子類

重寫:方法的名稱一樣,參數清單也一樣,覆寫、覆寫

重載:方法的名稱一樣,參數清單不一樣

方法的覆寫重寫特點:建立的是子類對象,則優先用子類方法

方法覆寫重寫的注意事項:

必須保證父子類之間的方法名稱相同、參數清單也相同

@Override:寫在方法前面,用來檢測是不是有效的正确覆寫重寫,這個注釋就算不寫,隻要滿足要求,也是正确的覆寫重寫

子類方法的傳回值必須小于等于父類方法的傳回值範圍。Object類是所有類的父類

子類方法的權限必須大于等于父類方法的權限修飾符。public > protected > (default) > private 注意:(default)不是關鍵字default,而是什麼都不寫,留白

繼承中方法的覆寫重寫應用場景

子類構造方法當中有一個預設隐含的 "super()" 調用,是以一定是先調用的父類構造,後執行的子類構造

子類構造可以通過super關鍵字來調用父類重載構造

super的父類構造調用,隻能是第一個語句 ,不能一個子類構造調用多次super構造

子類必須調用父類構造方法,不寫贈送super() 寫了則用寫的指定該的super調用,super隻能有一個,還必須是第一個

在子類的成員方法中,通路父類的成員變量

在子類的成員方法中,通路父類的成員方法

在子類的構造方法中,通路父類的構造方法

在本類的成員方法中,通路本類的成員變量

在本類的成員方法中通路本類的另一個成員方法

在本類的構造方法中,通路本類的另一個構造方法

注意:

在第三種用法中要注意:this(..)調用必須是構造方法的一個語句,唯一一個

super和this兩種構造調用,不能同時使用

Java語言繼承的三個特點:

一個類的 直接父類隻能有唯一一個

Java語言可以多繼承

一個子類的直接父類是唯一的,但是一個父類可以擁有很多個子類

淺談面向對象思維面向對象:三:多态:

extends繼承或者implements實作,是多态的前提。

小明這個對象既有學生形态,也有人類形态。一個對象擁有多種形态,這就是:對象的多态性

淺談面向對象思維面向對象:三:多态:

代碼當中展現多态性,其實就是一句話:父類引用指向子類對象

格式:

父類名稱 對象名 = new 子類名稱()

接口名稱 對象名 = new 實作類名稱()

通路成員變量的兩種方式:

直接通過對象名稱通路成員變量,看等号左邊是誰,優先用誰,沒有則向上找

間接通過成員方法通路成員變量,看該方法屬于誰,優先用誰,沒有則像上找

在多态的代碼當中,成員方法的優先通路規則是:看new的是誰,就優先用誰,沒有則向上找

注意:編譯看左邊,運作看右邊

對比一下

成員變量:編譯看左邊,運作還看左邊

成員方法:編譯看左邊,運作看右邊

淺談面向對象思維面向對象:三:多态:

對象的向上轉型,其實就是多态寫法

格式: 父類名稱 對象名 = new 子類名稱()

含義:右側建立一個子類對象,把它當作父類來看待使用

向上轉型一定是安全的,從小範圍轉到了大範圍

但是有一個弊端:對象一旦向上轉型為父類,那麼就無法調用子類原本的特有内容

類似于:double num = 100 正确 int----double 自動類型轉換

淺談面向對象思維面向對象:三:多态:

對象的向下轉型,其實是一個還原動作

格式:子類名稱 對象名 = (子類名稱) 父類對象

含義:将父類對象,還原成為原本的子類對象

必須保證對象本來建立的時候,就是貓,才能向下轉型成為貓

如果對象建立的時候本來不是貓,現在非要向下轉型成為貓,就會報錯

類似于:int num = (int) 10.0 正确 int num = (int) 10.5 錯誤,發生精度損失

淺談面向對象思維面向對象:三:多态: