我的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>();
并非所有服装商品都是商品吗? ^
答案 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>()>
。