1. 程式人生 > 實用技巧 >19_多型及引用型別的轉化

19_多型及引用型別的轉化

多型:

  多型是繼封裝、繼承之後,Java面向物件中的第三個特性
  同一行為,通過不同的事物,可以體現出不同的形態。多型,描述的就是這樣的狀態

定義:

  是指同一行為(方法),具有多個不同的表現形式

多型的前提:

  1.繼承或者實現【二選其一】
  2.方法的重寫[意義提現:【不重寫,無意義】
  3.父類引用指向子類物件【格式提現】

多型的體現:

  格式:(型別轉換 父類的轉子類)
  父類型別 變數名 = new 子類型別();
    變數名.方法名();

父類型別:指子類物件繼承的父類型別,或者實現的父介面型別。

  如:
                    Fu  fu  
= new Zi(); fh.method();

備註:當你在使用多型的時候,程式會首先檢查父類中是否含有該方法,
如果沒有,擇編譯錯誤; 如果有,執行的是子類重寫之後的方法。

多型的好處:

   在程式開發過程中,父類型別一般作為方法形式引數,傳遞子類物件給方法,
當你進行方法的呼叫,更能體現出多型的擴充套件性和便利性。
  總結:由於多型特性的支援,不僅僅是替代,在擴充套件性方面,無論之後再出現多少個字類,
  我們不需要再重複的定義showXxxEat()方法,直接使用showAnimalEat()方法。
  所以多型的好處,體現在可以使程式編寫更簡單,並且有良好的擴充套件性。

引用型別的轉化

  引用型別就好比多型中的父類引用指向子類就是

    多型的轉型為:向上轉型和向下轉型

  向上轉型:   

        多型本身是子類型別向上轉換的過程,這個過程是預設的。
        當父類引用指向一個子類物件的時候,便是向上轉型。

  格式:

                 父類型別   變數名   =   new   子類型別();
                  如:Animal  animal = new Cat();                

  向下轉型:  

        父類型別向子類型別向下轉換的過程,這個過程是強制的。一個已經向上轉型的子類物件,將父類引用轉換為子類引用,可以使用強制型別轉換格式,便是向下轉型。

  格式:    

  

                    子類型別   變數名  =  (子類型別)父類變數名;
                     如  Cat  cat  = (Cat)  animal;    

為什麼要轉型?

  當使用多型方式呼叫方法時,首先會檢查父類中是否含有該方法,如果沒有,則編譯錯誤,進一步說,不能直接呼叫子類擁有而父類沒有的方法。所以,想要呼叫子類特有的方法,必須向下轉型。

轉型的異常:  

  兩個型別沒有任何繼承關係,不符合型別轉換的定義。為了避免ClassCastException的發生,Java提供了instanceof關鍵字,給引用變數做型別校驗。

格式:  

          變數名   instanceof   資料型別
                先拿變數名與資料型別判斷
                如果變數名屬於該型別資料   返回true
                如果變數名不屬於該資料型別  返回false