不了解涉及HashMaps的Java多态示例

时间:2016-04-25 04:56:09

标签: java polymorphism

我的Java多态性生锈了。

如果我有一个商品类,然后是一个扩展商品的类服装,为什么我不能做以下事情?

HashMap<String, Merchandise> stuff = new HashMap<String, Clothing>();

当我这样做时,我收到此编译错误:

DataStore.java:5: error: incompatible types: HashMap<String,Clothing> cannot be converted to HashMap<String,Merchandise>
        public static HashMap<String, Merchandise> tshirts = new HashMap<String, Clothing>();

并非所有服装商品都是商品吗?                                                              ^

2 个答案:

答案 0 :(得分:1)

考虑以下情况:

HashMap<String, Clothing> clothing = ...
HashMap<String, Merchandise> merchandise = clothing; // Suppose this is allowed
merchandise.put("Potato", new Potato());
呃哦,把马铃薯放进商品里,它也穿上了衣服,因为它们引用了同样的物品!

答案 1 :(得分:1)

你需要这样做: HashMap<String,? extends merchandise> m=new HashMap<String,Clothing>();

HashMap<String, Merchandise>不是HashMap<String, Clothing>()>