[轉]java提高篇(十一)-----強制類型轉換

來源:互聯網
上載者:User

標籤:code   子類   引用資料類型   情況   失敗   nbsp   使用   否則   資料類型   

 在java中強制類型轉換分為基礎資料型別 (Elementary Data Type)和引用資料類型兩種,這裡我們討論的後者,也就是引用資料類型的強制類型轉換。

      在Java中由於繼承和向上轉型,子類可以非常自然地轉換成父類,但是父類轉換成子類則需要強制轉換。因為子類擁有比父類更多的屬性、更強的功能,所以父類轉換為子類需要強制。那麼,是不是只要是父類轉換為子類就會成功呢?其實不然,他們之間的強制類型轉換是有條件的。

      當我們用一個類型的構造器構造出一個對象時,這個對象的類型就已經確定的,也就說它的本質是不會再發生變化了。在Java中我們可以通過繼承、向上轉型的關係使用父類類型來引用它,這個時候我們是使用功能較弱的類型引用功能較強的對象,這是可行的。但是將功能較弱的類型強制轉功能較強的對象時,就不一定可以行了。

      舉個例子來說明。比如系統中存在Father、Son兩個對象。首先我們先構造一個Son對象,然後用一個Father類型變數引用它:

      Father father = new Son();

      在這裡Son 對象執行個體被向上轉型為father了,但是請注意這個Son對象執行個體在記憶體中的本質還是Son類型的,只不過它的能力臨時被消弱了而已,如果我們想變強怎麼辦?將其物件類型還原!

      Son son = (Son)father;

      這條語句是可行的,其實father引用仍然是Father類型的,只不過是將它的能力加強了,將其加強後轉交給son引用了,Son對象執行個體在son的變數的引用下,恢複真身,可以使用全部功能了。

      前面提到父類強制轉換成子類並不是總是成功,那麼在什麼情況下它會失效呢?  

      當參考型別的真實身份是父類本身的類型時,強制類型轉換就會產生錯誤。例如:

      Father father = new  Father();

      Son son = (Son) father;

      這個系統會拋出ClassCastException異常資訊。

   所以編譯器在編譯時間只會檢查類型之間是否存在繼承關係,有則通過;而在運行時就會檢查它的真實類型,是則通過,否則拋出ClassCastException異常。

    所以在繼承中,子類可以自動轉型為父類,但是父類強制轉換為子類時只有當參考型別真正的身份為子類時才會強制轉換成功,否則失敗。

 

原文連結:http://www.cnblogs.com/chenssy/p/3393160.html

 

[轉]java提高篇(十一)-----強制類型轉換

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.