java基礎09

面向對象之多態:
(1)同一個對象在不同時刻表現出來的不同狀態。
另外的表達方式:針對同一個對象,編譯期類型和運行期類型不一致。
舉例:
狗(狗是狗,狗是動物)
水(水,水蒸氣,冰)
(2)前提:
A:有繼承或者實現關係。
B:有方法重寫。
C:有父類或者父接口引用指向子類對象。
(3)好處和弊端:
A:好處
擴展性和維護性(是由繼承保證)。
B:弊端
不能使用子類的特有功能。
(4)向上轉型和向下轉型
A:向上轉型
把子類對象賦值給父類或者父接口引用
B:向下轉型
把父類或者父接口引用強制轉換爲子類
(5)多態中的使用成員特點
A:成員變量
編譯運行都看左邊
B:成員方法
編譯看左邊,運行看右邊。

     

注意:

編程:要想做到擴展性強,那麼,最好使用多態機制。

開閉原則:

對修改關閉,對拓展開放。

測試類作爲客戶類,只能建對象,調用方法。

多態中的問題:向下轉型的時候,請千萬注意,可能發生異常,編譯可通過,

運行時會出現ClassCastException類轉換異常


(6)多態的體現形式
A:具體類多態(幾乎不用)
B:抽象類多態
C:接口多態


2:抽象類
(1)多個具體的事物具備相同的方法聲明,而方法體不同,我們就只抽取方法聲明,然後定義到一個類中。

  而一個沒有方法體的方法是一個抽象方法,一個類中有抽象方法,該類必須定義爲抽象類。

問題:爲什麼會有抽象類,作用是什麼

強制要求子類必須完成某些功能。

(2)抽象類的特點:
A:抽象類或者抽象方法用abstract修飾。
B:抽象類中不一定有抽象方法,有抽象方法的類一定是抽象類。
C:抽象類不能被實例化。
D:子類繼承抽象類,要麼是抽象類,要麼重寫所有父類抽象方法。
(3)抽象類的幾個小問題
A:不能被實例化,要構造方法幹啥?
爲了子類對象訪問父類數據時的初始化
B:一個類中沒有抽象方法,居然定義抽象類,有什麼意義?
爲了不讓外界創建對象
C:抽象關鍵字不能和哪些關鍵字共存
a:private
b:final 修飾的方法不能被重寫,
c:static 靜態修飾的方法可以用類名直接調用,抽象方法沒有方法體,調用無意義
(4)抽象類的成員:
A:成員變量 有變量,也有常量
B:構造方法 有構造方法,用於子類訪問父類數據的初始化
C:成員方法 有抽象方法,也有非抽象的方法

3:接口
(1)當一個抽象類中的方法都是抽象的時候,java就提供了一種更抽象的表達方式,叫接口。
(2)接口的成員特點:
A:成員變量 是常量 默認修飾符 public static final
B:成員方法 抽象方法 默認修飾符 public abstract
(3)接口的特點:
A:接口用interface修飾
B:子類實現接口用implements標識
C:接口不能被實例化
D:子類實現接口的時候,要麼是抽象類,要麼全部實現接口方法
(4)接口和類的關係
A:類與類的關係
繼承關係,只能單繼承,可以多層繼承。
B:類與接口的關係
實現關係,可以單實現,也可以多實現。
還可以在繼承一個類的同時,實現多個接口。
C:接口與接口的關係
繼承關係,可以單繼承,也可以多繼承。
(5)接口的思想特點(理解)
A:對外暴露的規則(USB接口)
B:程序的擴展功能(多態)
C:降低程序的耦合性(多態)
高內聚
低耦合
效率和安全

D:讓類可以多實現

耦合性:類與類的關聯關係。

高內聚:自己完成功能的能力。

程序的規則:低耦合,高內聚

效率安全

開閉原則:對修改關閉,對拓展開放。

單一原則:接口的定義規範的時候,儘量單一。(少)

(6)接口和抽象類的區別
共性:都是不斷抽取出來的抽象的內容。


A:成員特點
抽象類:
成員變量 可以變量,也可以常量
成員方法 可以抽象,也可以非抽象
構造方法 有
接口:
成員變量 只能是常量
成員方法 只能是抽象
B:繼承或者實現關係特點
a:類與類的關係
繼承關係,只能單繼承,可以多層繼承。
b:類與接口的關係
實現關係,可以單實現,也可以多實現。
還可以在繼承一個類的同時,實現多個接口。
c:接口與接口的關係
繼承關係,可以單繼承,也可以多繼承。
C:設計區別
抽象類中定義的是體系的共性內容。表達的是:is a的關係。
接口中定義的是體系的擴展功能。表達的是:like a的關係。

(7)如何實現一個繼承體系
分析:由具體到抽象
實現:由抽象到具體


學習:抽象的內容,因爲它定義的是共性內容。
使用:具體的內容,因爲它纔是具體實現,才具體更多的功能。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章