java - 不理解涉及 HashMap 的 Java 多态性示例

标签 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>();

所有的服装元素不都是商品吗? ^

最佳答案

考虑以下场景:

HashMap<String, Clothing> clothing = ...
HashMap<String, Merchandise> merchandise = clothing; // Suppose this is allowed
merchandise.put("Potato", new Potato());

呃哦,通过将土 bean 放入商品中,它也进入了服装中,因为它们引用了同一个对象!

关于java - 不理解涉及 HashMap 的 Java 多态性示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36832267/

相关文章:

oop - 实际类型在通话中丢失

java - 更改Jtable、Jframe中列名的样式(字体、字体大小、背景颜色)

java - Tomcat 未启动 JRE 未正确定义

java - Python 多态 VS JAVA 多态

C++ 转换为基类

c++ - 在派生类中使用基类的模板参数

c++ - C++中堆类的多态性

java - 在Java中运行Cucumber时修改CucumberOptions标签

java - maven 构建仅在 Jenkins 中失败- Artifact {null :null:null:jar}: The groupId cannot be empty

java - JSF 中的多个页面不调用支持 bean 更改器(mutator)