面向對象四

1、多態
1. 多態:失誤存在的多種形態
2. 多態前提:
a. 要有繼承關係
b. 要有方法重寫
c. 要有父類引用指向子類對象
3. 多態中成員訪問特色:
a. 成員變量
i. 編譯看左邊(父類),運行看左邊(父類)
b. 成員方法:
i. 編譯看左邊(父類),運行看右邊(父類) [動態綁定],編譯的時候找父類的方法,運行的時候找子類的方法。
c. 靜態方法:
i. 編譯看左邊(父類),運行看左邊(父類)。
ii. (靜態和類相關,算不上重寫,因此,訪問仍是左邊)。
※只有非靜態的成員方法,編譯看左邊,運行看右邊。
4. 多態中的向上轉型和向下轉型
a. Person p =new SuperMan(); //向上轉型
b. SuperMan() sm=new (SuperMan)p;//向下轉型
5. 多態的好處和弊端
a. 好處
i. 提升代碼的維護性(繼承保證)
ii. 提升代碼的擴展性(由多態保證)
iii. 能夠當作形式參數,能夠接受任意子類對象
b. 弊端:
i. 不能使用子類的特有屬性和行爲
2、抽象類概述及其特色
1. 抽象類概述
a. 抽象就是抽出像的部分
2. 抽象類的特色
a. 抽象類和抽象方法必須用abstract關鍵字修飾
i. 抽象類:abstract class 類名{}
ii. 抽象方法:public abstract void eat();
b. 抽象類不必定有抽象方法,有抽象方法的類必定是抽象類或者接口。
c. 抽象類不能實例化
i. 按照多臺的方式,由具體的子類實例化。其實這也是墮胎的一種,抽象類多態。
d. 抽象類的子類
i. 要麼是抽象類
ii. 要麼重寫抽象類中的全部抽象方法。
 
3. 抽象類中的成員特色:
a. 成員變量:既能夠是變量,也能夠是常量。abstract修飾符不能修飾成員變量
b. 構造方法:有
i. 用於子類訪問父類數據的初始化。
c. 成員方法:既能夠抽象的,也能夠是非抽象的。
d. 和abstract不能共存的修飾符
i. static:經過類名調用抽象方法是沒喲意義的。
ii. final:abstract強制子類重寫,final 不容許子類重寫,相互矛盾。
iii. private:只能在本類中訪問,子類沒法訪問該方法,則不能重寫。
3、接口的概述及其特色:
1. 接口概述
a. 從狹義的角度講就是指java中的interface
b. 從廣義的角度講對外提供規則的都是接口
2. 接口的特色:
a. 接口用關鍵字interface表示
i. interface 接口名{}
b. 類實現接口用implements表示
i. class 類名 implements 接口名{}
c. 接口不能實例化
i. 能夠按照多態的方式實例化。
d. 接口的子類
i. 能夠是抽象類,可是意義不大
ii. 可使具體類,要重寫接口中的全部抽象方法。
3. 接口中的成員變量
a. 只能是常量,而且是靜態的公共的。
i. 默認修飾符:public static final,建議手動給出該修飾符、
b. 構造方法:接口沒有構造方法
c. 成員方法:只能是抽象方法
i. 默認修飾符:public abstract,建議手動給出該修飾符。
4、類與類、類與接口、接口與接口的關係
1. 類與類:
a. 繼承關係,只能單繼承,能夠多層繼承。
2. 類與接口
a. 實現關係,能夠單實現,也能夠多實現。
b. 而且還能夠在繼承一個類的同時實現多個接口。
3. 接口與接口
a. 繼承關係,能夠單繼承,也能夠多繼承。
5、抽象類和接口的區別:
1. 成員區別:
a. 抽象類:
i. 成員變量:能夠變量、也能夠常量
ii. 構造方法:有
iii. 成員方法:能夠抽象,也能夠非抽象
b. 接口:
i. 成員變量:只能是常量
ii. 成員方法:只能是抽象方法。
2. 關係區別:
a. 類與類:
i. 繼承,單繼承
b. 類與接口:
i. 實現,單實現,多實現。
c. 接口與接口:
i. 繼承,單繼承,多繼承。
3. 設計理念區別:
a. 抽象類:被繼承體現的是 「is a」的關係,抽象類中定義的是該繼承體系的共性功能
b. 接口: 被實現體現的是「like a」的關係,接口中定義的是該繼承體系的擴展功能。
相關文章
相關標籤/搜索