這篇文章將為大家詳細(xì)講解有關(guān)如何在Java中使用多態(tài),文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對相關(guān)知識(shí)有一定的了解。
創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的秀洲網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
Java的特點(diǎn)有哪些 1.Java語言作為靜態(tài)面向?qū)ο缶幊陶Z言的代表,實(shí)現(xiàn)了面向?qū)ο罄碚?,允許程序員以優(yōu)雅的思維方式進(jìn)行復(fù)雜的編程。 2.Java具有簡單性、面向?qū)ο?、分布式、安全性、平臺(tái)獨(dú)立與可移植性、動(dòng)態(tài)性等特點(diǎn)。 3.使用Java可以編寫桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序等。
一 點(diǎn)睛
向上轉(zhuǎn)型:或者稱為向父類轉(zhuǎn)型。父類的對象通過子類對象實(shí)例化,實(shí)際上就是對象的向上轉(zhuǎn)型。向上轉(zhuǎn)型不需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換,但是向上轉(zhuǎn)型會(huì)丟失精度。
向下轉(zhuǎn)型:或者稱為向子類轉(zhuǎn)型。也就是說父類對象可以轉(zhuǎn)換為子類對象,但是,此時(shí)必須進(jìn)行強(qiáng)制類型轉(zhuǎn)換。
向上轉(zhuǎn)型時(shí),父類對象所能看見的方法依然是本類之中定義的方法(即被子類覆蓋的方法)。如果子類擴(kuò)充了一些新的方法,父類是看不見的。
二 父類對象找不到子類的擴(kuò)充方法
1 代碼
class baseClass { public void print() { System.out.println("*****--父類baseClass:public void print(){}") ; } } class subClass extends baseClass { public void print() // 方法覆寫 { System.out.println("#####--子類subClass:public void print(){}") ; } public void getB() // 此方法為子類擴(kuò)充的功能 { System.out.println("#####--子類subClass:public void getB(){},B類擴(kuò)充方法。") ; } } public class NewMethodTest { public static void main(String args[]) { baseClass baseObj = new subClass() ; // 實(shí)例化子類對象 baseObj.print() ; baseObj.getB() ; // 這個(gè)方法父類無法找到 } }
2 運(yùn)行
編譯失敗
3 說明
盡管父類對象baseObj的實(shí)例化依靠子類完成,但是它能夠看見的還是自己本類所定義的方法名稱,如果方法被子類覆寫了,則調(diào)用的方法體也是被子類覆寫過的方法。
三 向下轉(zhuǎn)型
1 代碼
class baseClass { public void print() { System.out.println("*****--父類baseClass:public void print(){}") ; } } class subClass extends baseClass { public void print() // 方法覆寫 { System.out.println("#####--子類subClass:print()") ; } public void getB() // 此方法為子類擴(kuò)充的功能 { System.out.println("#####--子類subClass:getB(),子類擴(kuò)充方法。") ; } } public class DownCastTest { public static void main(String args[]) { baseClass baseObj = new subClass() ; // 實(shí)例化子類對象 baseObj.print() ; //調(diào)用子類subClass的 print() subClass subObj = (subClass) baseObj ; // 向下轉(zhuǎn)型,強(qiáng)制完成 subObj.getB() ; // 這個(gè)方法父類無法找到,但子類對象可以找到 } }
2 運(yùn)行
#####--子類subClass:print()
#####--子類subClass:getB(),子類擴(kuò)充方法。
3 說明
在形式上,類定義的對象只能看到自己所屬類中的成員,雖然通過向上類型轉(zhuǎn)換,子類對象可以給父類對象賦值,但父類對象也僅能看到在子類中被覆蓋的成員(這些方法也在父類定義過了),父類對象無法看到子類的新擴(kuò)充方法。
四 隱藏
1 點(diǎn)睛
在某些場景下,我們不希望父類的方法被子類方法覆寫,即子類實(shí)例化后會(huì)調(diào)用父類的方法,而不是子類的方法,這種情況要用到隱藏。被關(guān)鍵字static修飾的靜態(tài)方法是不能被覆蓋的,Java中就是利用這一特性達(dá)到隱藏的效果。
2 代碼
class Father { public static void overWritting() { System.out.println("#####--Father method"); } } class Son extends Father { public static void overWritting() { System.out.println("*****--Son method"); } } public class HideSubClass { public static void main(String args[]) { Father dad = new Son(); dad.overWritting(); Father.overWritting(); Son.overWritting(); } }
3 運(yùn)行
#####--Father method
#####--Father method
*****--Son method
關(guān)于如何在Java中使用多態(tài)就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。