物件導向中的多型性

2021-10-09 15:50:17 字數 2651 閱讀 8778

繼承性是多型性的前提,乙個物件擁有多個形態,這就是物件的多型性多型性

舉例說明

父類為人類,子類為學生,此時建立乙個物件叫做小明,這個小明物件既是學生也是人類,這就是多型性的體現

答:父類引用指向子類物件

多型的格式如下:

//	(1)

父類名稱 物件名 =

new 子類名稱();

// (2)

介面名稱 對想名 =

new 實現類名稱(

);

直接通過物件名訪問成員變數時,看等號左邊是誰則優先用誰,沒有則向上找

舉例說明:

// 定義了乙個父類

public

class

fu// 定義了乙個子類繼承父類

public

class

ziextends

fu// 建立乙個**啟動入口類

public

class

start

}

間接通過成員方法訪問成員變數,看該方法屬於誰則優先用誰,沒有則向上找

舉例說明:

// 定義了乙個父類

public

classfu}

// 定義了乙個子類繼承父類

public

class

ziextendsfu}

// 建立乙個**啟動入口類

public

class

start

}

口訣:編譯看左邊,執行還看左邊

舉例說明:

// 定義了乙個父類

public

class

fupublic

void

method()

public

void

methofu()

}// 定義了乙個子類繼承父類

public

class

ziextends

fu@override

public

void

method()

public

void

methozi()

}// 建立乙個**啟動入口類

public

class

start

}

口訣:編譯看左邊,執行看右邊

舉個例子:

有乙個含有work()抽象方法的員工類作為父類。還有兩個子類,分別是講師類和助教類,其中講師類包含work()的方法,主教類中包含work()的方法

如果我們不用多型,只用子類建立講師物件和助教物件,寫法為

teacher one =

newteacher()

; one.

work()

;// 講課方法

assistant two =

newassistant()

; two.

work()

;// 輔導方法

使用多型的寫法為

employee one =

newteacher()

; one.

work()

;// 講課方法

employee two =

newassistent()

; two.

work()

;// 輔導方法

當我們只想呼叫work方法,其他功能不關心的時候,就會發現使用多型的寫法無論右邊new的是偶換成哪個子類物件,等號左邊的呼叫方法都不會變化(1)向上轉型的寫法:

其實就是多型的寫法,格式為

父類名稱 物件名 =

new 子類名稱(

);

(2)向上轉型的含義:

建立了乙個子類物件,把他當作父類來看待

舉例如下:

情景為,父類為動物類,子類為貓類

aninmal cat =

newcat()

;

注意事項:

向上轉型一定是安全的,沒有問題的,正確的,為了便於理解我們可以把它看作是「資料型別轉換的過程」,資料型別轉換是從小範圍到大範圍,向上轉型也是從子類範圍到父類範圍

(1)向下轉型的寫法為:

子類名稱 物件名 =

(子類名稱)父類物件;

舉例解釋:

// 含義:將向上轉型為動物物件,還原為原本的貓物件

aninmal animal=

newcat()

; cat cat =

(cat)animal;

注意事項:

向下轉型的時候必須保證向下轉型為原來的的類,如果向下轉型為不是原來的物件那麼編譯會報錯

物件導向的多型 多型性

多型指的是一類事物有多種形態,比如水有多種形態 冰 水 水蒸氣,但都是h2o,下面定義乙個h2o的父類和三種形態的子類 class h2o def init self,name,temperature self.name name self.temperature temperature deftu...

物件導向之多型 多型性

一 多型 多型指的是一類事物有多種形態 動物有多種形態 人,狗,豬 import abcclass animal metaclass abc.abcmeta 同一類事物 動物 abc.abstractmethod deftalk self pass class people animal 動物的形態...

物件導向程式設計 多型性

include iostream using namespace std class b0 int main 輸出 b1 display d1 display 示例3 include using namespace std class b0 基類b0宣告 void main 主函式 輸出 b0 di...