首先,什麼是多型?我們應該從什麼角度來理解多型?其實,我們不妨把多型理解成一種事物的多種存在形態,比如,貓和狗都可以變成動物,而動物又可以變成貓和狗。
為了充分理解多型,我們可以從以下這幾個方面來理解多型。
第一、從多型的體現方面:我們使用多型的時候,建立的是父類的引用,開闢的是子類的空間,由於沒有開闢父類的空間,所以是父類的引用指向子類物件,並不是真正的父類自己建立了物件,而且父類物件的引用還可以作為函式引數來接收子類物件哦!
第二、多型實現的前提:必須是類與類之間要有關係,要麼繼承,要麼實現,存在覆蓋,其實就是有抽象函式。
第三、從多型的好處:大大提高程式的可拓展性
第四、多型的應用:1.父類物件的引用指向子類物件,其實本質上是乙個向上轉型,就像int轉成double一樣,兒子穿了一身爸爸的衣服,扮成了爸爸。2.但變成了爸爸之後,只能使用爸爸特有的技能,兒子怎麼能夠使用自己本身的技能呢?這時候就需要向下轉型,脫下偽裝,將父類物件的引用強轉成子類型別,就可以使用子類特有的技能了。
第五、多型的弊端:提高了拓展性,但是只能使用父類的引用訪問父類的成員。
人:男人,女人
動物:貓,狗。
貓 x = new 貓();
動物 x = new 貓();
多型的體現
父類的引用指向了自己的子類物件。
父類的引用也可以接收自己的子類物件。
多型的前提
必須是類與類之間有關係。要麼繼承,要麼實現。
通常還有乙個前提:存在覆蓋。
多型的好處
多型的出現大大的提高程式的擴充套件性。
多型的弊端:
提高了擴充套件性,但是只能使用父類的引用訪問父類中的成員。
多型的應用
/*
動物,貓,狗。
*/abstract
class
animal
class
catextends
animal
public
void
catchmouse()
}class
dogextends
animal
public
void
kanjia()
}class
pigextends
animal
public
void
gongdi()
}//-----------------------------------------
class
duotaidemo
public
static
void
function
(animal a)
/* public static void function(cat c)//
public static void function(dog d)
public static void function(pig p)
*/}
人:男人,女人
動物:貓,狗。
貓 x = new 貓();
動物 x = new 貓();
多型的體現
父類的引用指向了自己的子類物件。
父類的引用也可以接收自己的子類物件。
多型的前提
必須是類與類之間有關係。要麼繼承,要麼實現。
通常還有乙個前提:存在覆蓋。
多型的好處
多型的出現大大的提高程式的擴充套件性。
多型的弊端:
雖然提高了擴充套件性,但是只能使用父類的引用訪問父類中的成員。
多型的應用
多型的出現**中的特點(多型使用的注意事項)
第二個問題:如何使用子類特有方法。
/*
動物,貓,狗。
*/class
catextends
animal
public
void
catchmouse()
}class
dogextends
animal
public
void
kanjia()
}class
pigextends
animal
public
void
gongdi()
}//-----------------------------------------
class
duotaidemo2
public
static
void
function
(animal a)
else
*/if(a instanceof
cat)
else
if(a instanceof
dog)
/* instanceof : 用於判斷物件的型別。 物件 intanceof 型別(類型別 介面型別) */
}}
java學習之多型
向上轉型是不需要進行強制型別轉換的,但是向上轉型會丟失精度。與向上轉型對應的乙個概念就是 向下轉型 所謂向下轉型,也就是說父類的物件可以轉換為子類物件,但是需要注意的是,這時則必須要進行強制的型別轉換。類似於人壓彈簧 一 向上轉型可以自動完成 二 向下轉型必須進行強制型別轉換。可以用instance...
Java學習之多型
原帖 多型 晚繫結。不要把函式過載理解為多型。因為多型是一種執行期的行為,不是編譯期的行為。多型 父型別的引用可以指向子型別的物件。比如 parent p new child 當使用多型方式呼叫方法時,首先檢查父類中是否有該方法,如果沒有,則編譯錯誤 如果有,再去呼叫子類的該同名方法。注意此處,靜態...
Java學習之多型
多型 晚繫結。不要把函式過載理解為多型。因為多型是一種執行期的行為,不是編譯期的行為。多型 父型別的引用可以指向子型別的物件。比如 parent p new child 當使用多型方式呼叫方法時,首先檢查父類中是否有該方法,如果沒有,則編譯錯誤 如果有,再去呼叫子類的該同名方法。注意此處,靜態sta...