黑馬程序員 多態

概念: 一個事物的多種形態


多態前提和體現
有繼承關係或者實現關係
有方法重寫
有父類引用指向子類對象

成員訪問特點
方法的運行看右邊,其他都看左邊


多態的好處
提高了程序的維護性(由繼承保證)
提高了程序的擴展性(由多態保證)
多態的弊端:
父類不能訪問子類的特有方法
如果非要訪問,向下轉型(強轉)

向上轉型
從子到父
父類引用指向子類對象
向下轉型
從父到子
父類引用轉爲子類對象


抽象類:
抽象類:包含抽象方法的類,就是抽象類。 需要使用關鍵字 abstract修飾
抽象方法:只有方法聲明,沒有方法體, 需要使用關鍵字 abstract修飾

抽象類特點
1:抽象類和抽象方法必須用abstract關鍵字修飾
格式
abstract class 類名 {}
public abstract void eat();
2:抽象類不一定有抽象方法,有抽象方法的類一定是抽象類
3:抽象類不能實例化
那麼,抽象類如何實例化呢?
按照多態的方式,由具體的子類實例化。
其實這也是多態的一種,抽象類多態。
4:抽象類的子類
要麼是抽象類
要麼重寫抽象類中的所有抽象方法
注意:想創建對象,必須要將所有的抽象方法實現,才能創建對象


抽象類的成員特點:
成員變量
可以是變量
也可以是常量
構造方法
有構造方法,但是不能實例化
那麼,構造方法的作用是什麼呢?
用於子類訪問父類數據的初始化
成員方法
可以有抽象方法 限定子類必須完成某些動作
也可以有非抽象方法 提高代碼服用性

abstract不能和哪些關鍵字共存
private 衝突
final 衝突
static 無意義

接口:
接口特點
接口用關鍵字interface表示
格式:interface 接口名 {}

類實現接口用implements表示
格式:class 類名 implements 接口名 {}
接口不能實例化
那麼,接口如何實例化呢?
按照多態的方式,由具體的子類實例化。
其實這也是多態的一種,接口多態。
接口的子類
要麼是抽象類
要麼重寫接口中的所有抽象方法

接口成員特點
成員變量
只能是常量
默認修飾符 public static final
構造方法
沒有,因爲接口主要是擴展功能的,而沒有具體存在
成員方法
只能是抽象方法
默認修飾符 public abstract


類與類關係:
繼承關係,只能單繼承,但是可以多層繼承

類與接口關係:
實現關係,可以單實現,也可以多實現
還可以在繼承一個類的同時實現多個接口

接口與接口關係:
繼承關係,可以單繼承,也可以多繼承


(面試題)抽象類和接口的區別?
成員區別
抽象類 
變量,常量
抽象方法
非抽象方法
接口 
常量
抽象方法

關係區別
類與類 
繼承,單繼承
類與接口 
實現,單實現,多實現
接口與接口 
繼承,單繼承,多繼承

設計理念區別
抽象類 被繼承體現的是:”is a”的關係。共性功能
接口 被實現體現的是:”like a”的關係。擴展功能
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章