Java中的Polymorphisim代表了通過覆蓋子類方法可以實現的許多形式。關於允許傳遞通用值的泛型,如ArrayList<Object>
。這是多態概念的一部分嗎? Cheers關於多態性bevaviour
回答
泛型和多態性是兩個不同的東西。
泛型主要用於指定期望的類型。您可以使用通配符來定義一系列類型。例如。 <? extends List>
可應用於任何類型的列表(LinkedList
,ArrayList
)
多態性是一個對象可以有多種類型的概念。所以一個對象可以是List的一個實例,並且以ArrayList
爲例。
例如,假設三類
public class Animal
public class Dog extends Animal
public class Cat extends Animal
如果你有Dog
一個實例,該對象既是Dog
和Animal
。
顯然,這兩個結合在一起的相當不錯,如果你定義一個ArrayList<Object>
,那麼你可以將任何Object
添加到列表(這是在Java中的任何類)在java中
Polymorphphism不能應用於泛型類型。 雖然String
延伸Object
,ArrayList<Object>
不能用於指ArrayList<String>
Object obj = new String(); // OK
ArrayList<Object> list = new ArrayList<String>(); // Not OK
許多人傾向於在面向對象編程模型方面考慮多態,但事實是多態是一個更廣泛的概念,而在其他編程範例中,它以不同的方式實現。在函數式編程語言如Haskell或SML中,參數多態性是關鍵。 Java泛型與它有許多相似之處。 –
多態性可以通過在Java兩種方式來實現。
- 靜態(超載 - 編譯時間)
- 動態(壓倒一切 - 運行時)
關於你的問題
是的,它可以通過在子類中重寫方法來完成。您也可以在重載和覆蓋的過程中爲參數創建對象。
使用對象進行多態性在Java中被認爲是不好的模式。它不會給你一個界面給你的保證和類型安全。
List<Object> animals = new ArrayList<Object>();
animals.add(new Sheep());
animals.add(new Cat());
// This will throw us an error! (ClassCastException)
Cat cat = (Cat) animals.get(0)
上面演示的錯誤無法在編譯時捕獲,只會在運行時發生錯誤時引發。如果我們創建了一個Animal接口,我們可以完全避免這個錯誤。
interface Animal {
//other methods you need to hide through polymorphism
void sound();
}
List<Animal> animals = new ArrayList<Animal>();
// Sheep and Cat implement the Animal interface
animals.add(new Sheep());
animals.add(new Cat());
// No error
Animal animal = animals.get(0)
// This will through a COMPILE TIME error
Cat cat = animal.get(1);
這顯示了試圖將實現多態更好的辦法,我們已經創建了一個更安全的方式時,可以在編譯時不能在運行時進行檢查。儘可能避免使用Object,可能會有更好的界面供您設計或使用。
- 1. 關於多態性
- 2. 關於MFC C++多態性
- 3. 關於C++中的多態性
- 4. 關於向下轉換和多態性
- 5. 關於Java接口和多態性
- 6. 多態性關係
- 7. FactoryGirl關於多態關聯
- 8. 多態性關聯有關狀態
- 9. 關於CRTP靜態多態性的困惑
- 10. 反向多態性關聯
- 11. 需要更多關於Objective-C的多態性和繼承
- 12. 關於多態關聯的問題
- 13. 軌多態性許多-to-many關聯
- 14. 需要關於此代碼與多態性的解釋
- 15. 來自oops的關於超載和多態性的問題
- 16. 關於多態性和超載的問題
- 17. 關於界面和多態性的一些示例/提示
- 18. 關於我的程序和多態性的問題
- 19. 只是一個關於多態性的快速事件
- 20. 多態性,參變多態性,特殊多態性
- 21. 在bash中模擬異常類似bevaviour
- 22. 排序多態性關係laravel
- 23. 多態關聯和嵌套屬性
- 24. Activeadmin,多態關係和嵌套屬性
- 25. 過濾多態性belongs_to的關係
- 26. Mongoid關係多態性協會
- 27. 驗證多態關聯的唯一性
- 28. C++多態性和新的關鍵字
- 29. 打開/關閉原理和多態性
- 30. SQLAlchemy中的多態屬於關係?
我認爲這個鏈接可能包含有趣的信息給你:[多態可能沒有繼承](http://stackoverflow.com/a/11732581/697630)。它涵蓋了不同類型的多態,包括參數多態,這就是你在這裏討論的。 –