1. 程式人生 > >關於向上轉型與向下轉型的一點個人見解

關於向上轉型與向下轉型的一點個人見解

正是大四實習期間,看李興華老師的Java教學視訊再打打基礎時,就遇見向上轉型與向下轉型的問題,向上轉型倒是通過視訊看懂了,向下轉型那一段看了好多遍都沒懂,上網查資料,也大多一語帶過,最後看了《Java程式設計思想》才稍明白了,好了,廢話少說。
向下轉型?這讓我想到了作為Java的三大基本思想之一的多型(父類引用指向子類物件),這就是一種向上轉型。 那麼什麼是多型呢?我習慣於從生物學的角度去理解它,即物種的多樣性,多型對於我來說就是”同一物種不同個體在同一行為上的不同表現”,就比如兩個人,他們都是人,但屬於不同個體,他們都愛運動,但一個打籃球,一個喜歡跑步。(本段文字純屬廢話,當然決定在於讀者自己)
好了,言歸正傳。例:Animal cat=new cat();這句程式碼前面聲明瞭一個父類物件(這相當於一個名字),後面卻在堆空間裡產生了一個子類物件,這句話翻譯成中文就是“貓是動物”,嗯,邏輯沒問題,反過來,動物是貓,呃??那狗是動物嗎??這就必須強制型別轉換了,當然這說的是向下轉型,下面再說。
向上轉型有什麼用?轉型之後,因為操作的是父類物件,所以是無法找到在子類中定義的新方法,最後物件中所得只有繼承和重寫的方法。 向下轉型:如果兩個沒有關係的物件之間發生了轉換關係,則肯定出現異常,所以上下轉型的關係的發生則必須有繼承關係。真的好了,我也真的不囉嗦的,我自己還得看視訊,敲程式碼。

*總結:向上轉型獲得的是繼承和重寫的子類方法,向下轉型獲得的是子類擴充套件的方法。因為要強制性型別轉換,所以向下轉型之前最好用instanceof();判斷一下。*(關鍵點)** ———————————————————————— 為了方便記憶我為大家畫了個圖,以區分上下轉型的許可權範圍關係:

這裡寫圖片描述

    在下第一次寫部落格,多有疏漏,望大家海涵!! 話不在多,而貴於精,這是本人的一點領悟,也希望大家有所收穫! 就這樣吧,再會!!!

2017/2/24

以上是之前寫的東西,今故地重臨,還是發現一些謬誤,也不重新改過了,出錯了也希望被看到錯在哪裡,有的時候犯錯更能加深領悟。
上圖中,向上轉型沒錯,向上轉型之後,如Animal an=new cat();
an物件只能呼叫從父類中繼承或是覆寫的方法,至於其自己擴充套件的方法,則處於undefined狀態。
而圖中向下轉型的標識則是錯的。如Animal an=new cat();cat ming=(cat)an;

如程式碼所示,要想向下轉型,則必須先向上轉型,否則會報錯的。而向下轉型之後,之前向上轉型之後失去的方法則全部找回。

最後,使用向上轉型與向上轉型有啥好處呢?
我的一點點理解哈,可以簡化程式碼,節省記憶體。唉,再寫下去,又是一篇部落格,我也不寫了。其實寫了,估計觀眾們也不愛看,所以把大致的原理、重點說一下就算完事了。作為一個程式設計師,其實最重要的還是要自己敲程式碼,先了解了個知識的大概,然後就要練手了,到程式碼中去找自己的道。