Java向上轉(zhuǎn)型和向下轉(zhuǎn)型的區(qū)別說明
向上轉(zhuǎn)型和向下轉(zhuǎn)型的區(qū)別
前言:
- 向上轉(zhuǎn)型:父類引用類型指向了子類的實例對象,此時無法使用子類里的成員變量以及方法。
- 向下轉(zhuǎn)型:通過引用類型強轉(zhuǎn),恢復(fù)了子類的成員變量以及方法。
1.代碼實現(xiàn)

可以發(fā)現(xiàn),父類雖然指向了子類的實例對象,但是并不能調(diào)用子類對象的方法,編譯器報錯。此時我們可以看作被隱藏了,那么怎樣才可以把被隱藏的方法放出來呢?此時就需要向下轉(zhuǎn)型。
2.實現(xiàn)向下轉(zhuǎn)型
將a強轉(zhuǎn)為Son引用類型。
((Son)a).sleep(); //調(diào)用子類的sleep方法
3.此時執(zhí)行程序

成功向下轉(zhuǎn)型,那么這樣有什么作用呢?
其實,無論是上轉(zhuǎn)還是下轉(zhuǎn)都是為了讓類的使用范圍和適用范圍發(fā)生變化,以便操作不同范圍的變量或者方法。
這樣其實就是一個java的繼承多態(tài),利于程序擴展。
我們需要這種設(shè)計方式,才會寫出更易維護、簡潔的代碼。
簡單認識向上轉(zhuǎn)型和向下轉(zhuǎn)型
向上轉(zhuǎn)型:父類引用指向子類對象
例如:子類student繼承了父類person
Person person = new Student();
向上轉(zhuǎn)型后的變化
關(guān)于方法:person可以調(diào)用子類和父類公用的方法(如果子類重寫了父類的方法,則調(diào)用子類的方法),子類特有的方法無法調(diào)用。
關(guān)于屬性: person可以調(diào)用父類的屬性,不可以調(diào)用子類的屬性。
向上轉(zhuǎn)型的作用
減少一些重復(fù)的代碼
對象實例化的時候可以根據(jù)不同需求實例化不同的對象
向下轉(zhuǎn)型:子類引用指向父類對象
Father f=new Son() //先向上轉(zhuǎn)型 Son s=(Son) f;//再進行向下轉(zhuǎn)型,進行強制轉(zhuǎn)換,子類引用s,父類引用f
向下轉(zhuǎn)型的條件:先向上轉(zhuǎn)型,再向下轉(zhuǎn)型。沒有經(jīng)過向上轉(zhuǎn)型,會提示編譯錯誤。
向下轉(zhuǎn)型后的變化
關(guān)于方法:可以調(diào)用子類的所有方法,和屬性,類型轉(zhuǎn)為子類
關(guān)于屬性:調(diào)用的屬性為子類的屬性。
向下轉(zhuǎn)型的作用:向上轉(zhuǎn)型時 ,會遺失子類對象獨有的其他方法;可以通過向下轉(zhuǎn)型在重新轉(zhuǎn)回。
這種轉(zhuǎn)型可能存在轉(zhuǎn)型失敗地風(fēng)險,因為父類地范圍更廣,如果不確定父類對象就是該子類的對象,不推薦使用向下轉(zhuǎn)型。
Person person = new Student(); Teacher teacher = (Teacher) person; // 不安全
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringCloud?Nacos服務(wù)分級存儲模型詳解
Nacos服務(wù)分級存儲模型是Nacos存儲服務(wù)注冊信息和配置信息的核心模型之一,本文將對?Nacos?服務(wù)分級存儲模型進行深入解析,感興趣的朋友一起看看吧2024-02-02
Java日期轉(zhuǎn)換注解配置date?format時間失效
這篇文章主要為大家介紹了Java日期轉(zhuǎn)換注解配置date?format時間失效,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12
利用synchronized實現(xiàn)線程同步的案例講解
這篇文章主要介紹了利用synchronized實現(xiàn)線程同步的案例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
maven多個plugin相同phase的執(zhí)行順序
這篇文章主要介紹了maven多個plugin相同phase的執(zhí)行順序,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
Mybatis resultType返回結(jié)果為null的問題排查方式
這篇文章主要介紹了Mybatis resultType返回結(jié)果為null的問題排查方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
一個JAVA小項目--Web應(yīng)用自動生成Word
前段時間接到一個Web應(yīng)用自動生成Word的需求,現(xiàn)整理了下一些關(guān)鍵步驟拿來分享一下。2014-05-05
Spring?Boot應(yīng)用打WAR包后無法注冊到Nacos的問題及解決方法
當(dāng)我們將?Spring?Boot?應(yīng)用打包成?WAR?并部署到外部?Tomcat?服務(wù)器時,可能會遇到服務(wù)無法注冊到?Nacos?的情況,其原因主要是應(yīng)用獲取不到正確的服務(wù)器端口,下面給大家介紹Spring?Boot?應(yīng)用打?WAR?包后無法注冊到?Nacos的問題及解決方法,感興趣的朋友跟隨小編一起看看吧2024-06-06

