1. 程式人生 > >多型中的引用型別轉換

多型中的引用型別轉換

  • 向上型別轉換(隱式/自動型別轉換),是小型別到大型別的轉換
  • 向下型別轉換(強制型別轉換),是大型別到小型別的轉換

    值得注意的是向上型別轉換是不存在風險的,例如將一個杯子裡的說倒到水壺裡,正常來講這樣是沒有問題的,計算機會自動的幫我們執行向上型別的轉換所以也被稱為自動型別轉換。
    而向下型別轉換是存在風險的,例如將水壺裡的水倒到杯子裡面,因為它可能會發生溢位,這種情況也被稱為資料的溢位,這樣是存在風險的。但是如果程式設計師願意做這種事情,我們也可以強制計算機組做這種操作的。但是我們怎麼樣避免一些風險呢?這裡我們就要用到instanceof運算子,來解決引用物件的型別問題,避免型別轉換帶來的安全性問題。

我們用程式碼體現一下

class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}
class test{
     public static void main(String[] args){
         Dog dog = new Dog();
         Animal animal = dog;//向上型別轉換 自動型別轉換
         Dog dog2 = (Dog)animal;
         //但是如果我們把這個父類的引用轉換成Cat型別的引用
         Cat cat = (Cat)animal;//這裡編譯器沒有檢查出錯誤,但是在執行時會報錯說沒有辦法將這個引用進行轉換。
//這是我們就要用到instanceof運算子 //如果animal物件含有Cat型別的元素 就會返回一個true if(animal instanceof Cat){ Cat cat = (Cat)animal; }else{ System.out.println("無法進行型別轉換"); } } }