2017-04-22 87 views
-4

我一直在砸我的頭,以瞭解java中對象類型轉換的實際用法,以及爲什麼它甚至在那裏。看下面的例子。對象隱式類型轉換的要點是什麼?

我的問題是以下面的評論形式。

請不要建議我去某處。我已經做到了。如果你知道,請直接回答我。謝謝。

檢查此代碼的方法'尖叫'覆蓋我沒有收到編譯時錯誤。看評論太

Animal aniObj = new Animal(); 
    Animal dogAniObj = new Dog(); 
    Dog dogObj = new Dog(); 

    ArrayList<Animal> animalArrayList = new ArrayList<Animal>(); 

    animalArrayList.add(aniObj); 
    animalArrayList.add(dogAniObj); 
    animalArrayList.add(dogObj);//Here when I am able to add the Dog object there no point in creating dogAniObj above 

    aniObj.scream();//Calls scream of Animal 
    dogAniObj.scream();//Calls scream of Dog 
    dogObj.scream();//Calls scream of Dog. Then why do i need above statement? Why to attain polymorphic behavior when we can directly call scream method with the Dog object when needed? 
+0

歡迎來到SO。你的問題是什麼 ? – c0der

+1

相關:http://stackoverflow.com/questions/383947/what-does-it-mean-to-program-to-an-interface –

+0

你在哪裏期待編譯時錯誤? – Bubletan

回答

0

這就是Java的給你作爲運行時多態性,在運行時是什麼對象引用它,該方法的實例將被調用。

認爲你是寫一些通用的lib /框架,那麼所有你想要的用途是Animal類,這是基礎,所有其他子類,如Dog, Cat等,那麼你可以不是你的成員一樣Dog myDog or Cat myCat有聲明應該Animal myAnimal使其可以服用所有的動物亞類。

Thast的爲什麼animalArrayList應該總是採取動物及其變種沒有編譯錯誤來。

你永遠不知道Animal類可以由你的lib用戶擴展來創建許多其他的Animal類。