8.Java多態對象的類型轉換

來源:互聯網
上載者:User

標籤:

這裡所說的物件類型轉換,是指存在繼承關係的對象,不是任意類型的對象。當對不存在繼承關係的對象進行強制類型轉換時,java 運行時將拋出 java.lang.ClassCastException 異常。

在繼承鏈中,我們將子類向父類轉換稱為“向上轉型”,將父類向子類轉換稱為“向下轉型”。

很多時候,我們會將變數定義為父類的類型,卻引用子類的對象,這個過程就是向上轉型。程式運行時通過動態綁定來實現對子類方法的調用,也就是多態性。

然而有些時候為了完成某些父類沒有的功能,我們需要將向上轉型後的子類對象再轉成子類,調用子類的方法,這就是向下轉型。

注意:不能直接將父類的對象強制轉換為子類類型,只能將向上轉型後的子類對象再次轉換為子類類型。也就是說,子類對象必須向上轉型後,才能再向下轉型。請看下面的代碼:

  1. public class Demo {
  2. public static void main(String args[]) {
  3. SuperClass superObj = new SuperClass();
  4. SonClass sonObj = new SonClass();
  5. // 下面的代碼運行時會拋出異常,不能將父類對象直接轉換為子類類型
  6. // SonClass sonObj2 = (SonClass)superObj;
  7. // 先向上轉型,再向下轉型
  8. superObj = sonObj;
  9. SonClass sonObj1 = (SonClass)superObj;
  10. }
  11. }
  12. class SuperClass{ }
  13. class SonClass extends SuperClass{ }

將第7行的注釋去掉,運行時會拋出異常,但是編譯可以通過。

因為向下轉型存在風險,所以在接收到父類的一個引用時,請務必使用 instanceof 運算子來判斷該對象是否是你所要的子類,請看下面的代碼:

  1. public class Demo {
  2. public static void main(String args[]) {
  3. SuperClass superObj = new SuperClass();
  4. SonClass sonObj = new SonClass();
  5. // superObj 不是 SonClass 類的執行個體
  6. if(superObj instanceof SonClass){
  7. SonClass sonObj1 = (SonClass)superObj;
  8. }else{
  9. System.out.println("①不能轉換");
  10. }
  11. superObj = sonObj;
  12. // superObj 是 SonClass 類的執行個體
  13. if(superObj instanceof SonClass){
  14. SonClass sonObj2 = (SonClass)superObj;
  15. }else{
  16. System.out.println("②不能轉換");
  17. }
  18. }
  19. }
  20. class SuperClass{ }
  21. class SonClass extends SuperClass{ }

運行結果:
①不能轉換

總結:對象的類型轉換在程式運行時檢查,向上轉型會自動進行,向下轉型的對象必須是當前參考型別的子類。

8.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.