物件導向之多型(向上轉型與向下轉型)

2022-09-08 02:48:13 字數 1487 閱讀 8608

什麼是多型:同乙個行為具有多個不同表現形式或形態的能力就是多型。

多型一般分為兩種:

重寫式多型和過載式多型。

過載式多型,也叫編譯時多型。也就是說這種多型再編譯時已經確定好了。過載大家都知道,方法名相同而引數列表不同的一組方法就是過載。在呼叫這種過載的方法時,通過傳入不同的引數最後得到不同的結果。

重寫式多型,也叫執行時多型。這種多型通過動態繫結(dynamic binding)技術來實現,是指在執行期間判斷所引用物件的實際型別,根據其實際的型別呼叫其相應的方法。也就是說,只有程式執行起來,你才知道呼叫的是哪個子類的方法。 

這種多型通過函式的重寫以及向上轉型來實現,我們上面**中的例子就是乙個完整的重寫式多型。

多型的條件

(1)繼承:在多型中必須存在有繼承關係的子類和父類。

(2)重寫:子類對父類中某些方法進行重新定義,在呼叫這些方法時就會呼叫子類的方法。

(3)向上轉型:在多型中需要將子類的引用賦給父類物件,只有這樣該引用才能夠具備技能呼叫父類的方法和子類的方法。

繼承也可以替換為實現介面。

物件的向上轉型:父類 父類物件 = 子類例項

package

test1;

class

person

public

void

car()

}class student extends

person

public

void

house()

}public

class

testcollection

}

輸出:

為什麼要發生向上轉型?

物件的向下轉型:子類 子類物件 = (子類)父類例項    為什麼要發生向下轉型?當父類需要呼叫子類的擴充方法時,才需要向下轉型。

class

person

}class student extends

person

public

void

fun()

}public

class

test

}  向下轉型之前一定要進行向上轉型!!

否則在轉型時會出現classcastexception(型別轉換異常–執行時異常)

問題: 如果向下轉型存在安全隱患,那麼如何轉型才靠譜?

先判斷在轉型(依靠instanceof關鍵字實現)引用名

instanceof 類 表示該引用是否能表示該類例項,返回boolean型別。class person

public

void

p()}

class student extends

person

public

void

fun()

}public

class

test}}}}

本篇文章的內容大體上就是這些了。我們來總結一下。

物件導向 多型與向上 向下轉型機制

開頭先回憶一下,物件導向的三大特徵 封裝 資料抽象 繼承 多型。為什麼多型排在最後一位,因為它是以前面兩個為前提的,尤其是繼承。多型本質在於同一種行為的多樣化表達 這句話不禁讓我想起了基因的多樣性表達,這是現實世界物種多型的原因 對於某一種行為而言,它的多樣性體現在兩種可能 1.行為主體相同,行為受...

多型向上向下轉型!

public abstract class animal public class cat extends animal void catchmouse 特有方法!public class dog extends animal void watchhouse 其實前面已經有所涉及,具體來說 以動物為...

多型,向上向下轉型

多型的前提 繼承 物件的多型 乙個物件擁有多種形態,例如小明有學生形態,有人類形態 中體現多型性 其實就是一句話,父類引用指向子類物件 person p new student 上句是向上轉型,一旦向上轉型為父類,就無法呼叫子類原本特有的內容 public class person public c...