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

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

成功向下轉型,那么這樣有什么作用呢?
其實,無論是上轉還是下轉都是為了讓類的使用范圍和適用范圍發(fā)生變化,以便操作不同范圍的變量或者方法。
這樣其實就是一個java的繼承多態(tài),利于程序擴展。
我們需要這種設計方式,才會寫出更易維護、簡潔的代碼。
簡單認識向上轉型和向下轉型
向上轉型:父類引用指向子類對象
例如:子類student繼承了父類person
Person person = new Student();
向上轉型后的變化
關于方法:person可以調用子類和父類公用的方法(如果子類重寫了父類的方法,則調用子類的方法),子類特有的方法無法調用。
關于屬性: person可以調用父類的屬性,不可以調用子類的屬性。
向上轉型的作用
減少一些重復的代碼
對象實例化的時候可以根據不同需求實例化不同的對象
向下轉型:子類引用指向父類對象
Father f=new Son() //先向上轉型 Son s=(Son) f;//再進行向下轉型,進行強制轉換,子類引用s,父類引用f
向下轉型的條件:先向上轉型,再向下轉型。沒有經過向上轉型,會提示編譯錯誤。
向下轉型后的變化
關于方法:可以調用子類的所有方法,和屬性,類型轉為子類
關于屬性:調用的屬性為子類的屬性。
向下轉型的作用:向上轉型時 ,會遺失子類對象獨有的其他方法;可以通過向下轉型在重新轉回。
這種轉型可能存在轉型失敗地風險,因為父類地范圍更廣,如果不確定父類對象就是該子類的對象,不推薦使用向下轉型。
Person person = new Student(); Teacher teacher = (Teacher) person; // 不安全
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
maven多個plugin相同phase的執(zhí)行順序
這篇文章主要介紹了maven多個plugin相同phase的執(zhí)行順序,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
Mybatis resultType返回結果為null的問題排查方式
這篇文章主要介紹了Mybatis resultType返回結果為null的問題排查方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
Spring?Boot應用打WAR包后無法注冊到Nacos的問題及解決方法
當我們將?Spring?Boot?應用打包成?WAR?并部署到外部?Tomcat?服務器時,可能會遇到服務無法注冊到?Nacos?的情況,其原因主要是應用獲取不到正確的服務器端口,下面給大家介紹Spring?Boot?應用打?WAR?包后無法注冊到?Nacos的問題及解決方法,感興趣的朋友跟隨小編一起看看吧2024-06-06

