我記得我剛學的時候,老師講的我似懂非懂,於是我就上網上查,我查到了乙個是這麼說的,
向上轉型就是兒子當爹用,向下轉型就是爹當兒子用,我當時覺得有道理,但是後來我發現,兒子是兒子,爹是爹,上面說的完全都不對!於是我就開始琢磨,能不能聯絡實際點,這樣也好幫我自己分析理解!就在這時,隔壁寢室來叫我打球,我豁然開朗。。。為啥不直接說打籃球,而說打球,球是各種求的抽象吧 ,籃球是乙個實在的物件, 當我使用的籃球中的上籃,轉身,三分的時候,我用的是球來呼叫,而不是籃球呼叫, 關鍵就在這麼乙個詞 球技**身,後仰等等等不都是對球類方法球技的改寫麼)!
其實方法的過載 和 重寫 都是多型,但這只是冰山一角,多型真正的應用,是在物件多型上!
物件多型:1向上轉型 upcasting 2向下轉型downcasting
upcasting :father father = new son();//son繼承於father
downcasting:son son = (son)father;// 使用向下轉型的時候 必須在之前發生向上轉型;
其實看到這裡,很多人都覺得,說的不是很清楚,只是列出兩個公式,還沒有明白什麼意思,其實向上轉型,和向下轉型的真實目的,了解了,公式自然而然記住了,也會應用了!
一 無論是向上轉型還是向下轉型,father 指向的都是new son();//這樣就明白了,只要我想用son的東西,我就直接用father 呼叫就行,因為father指向 son;
二 這種 把子類物件賦給 父類引用的順序 不可更改,也就是說不能把父類物件賦給子類引用,
這樣的,father father = new father(); son son = (son)father; 是錯誤的!
三 說來說去,你會認為,這也就是種形式唄,直接new son() 去用不也一樣嗎!幹嘛費這事,那麼這條的作用就來了,upcasting 時 應用 father 時 子類 覆寫 父類的方法可以執行,但是子類自己其餘的方法則唄遮蔽,這時候你想使用子類自己的方法怎麼辦?咔咔咔,向下轉型唄!
這樣以來你得少new多少次啊,**是不是就少些了很多!
以上都是我個人學習的總結,難免也有誤區之處,希望大家批評指正!
為了驗證我所說的內容,我特地舉了兩個例子,僅供參考!
class demo
} class ball
public void uskill()
//......還有很多功能不列舉了
} class basketball extends ball
public void nbastar()
} class football extends ball
} class korfball extends ball
}
吃飯了,,暫時舉這麼個例子吧 !
Java多型,向上轉型與向下轉型
多型意味著乙個物件有著多重特徵,可以在特定情況下,表現出不同的狀態,從而對應不同的屬性和方法。具體來說就是指在繼承過程中父類和子類中可以有多個同名但意義或者實現方式不同的屬性或方法,也就是過載和覆蓋。在實際應用中,還有兩種特殊情形 向上轉型和向下轉型。public class user public...
Java多型向上 向下轉型問題
推薦資源站 向上轉型假定父類為動物,子類為狗,父類有乙個方法發聲 狗繼承並覆蓋了乙個發聲方法。在子類重寫該方法 則 動物 a new 狗 這就為向上轉型a.發聲 在呼叫 a.發聲 時呼叫的是狗的發聲 也可調動物類其他方法 但不能呼叫狗類方法 向上轉型都會成功,是安全的。就像說狗是動物沒問題。向下轉型...
多型向上向下轉型!
public abstract class animal public class cat extends animal void catchmouse 特有方法!public class dog extends animal void watchhouse 其實前面已經有所涉及,具體來說 以動物為...