Java 创建Hashmap的对象并将其分配给map引用。为什么?

Java 创建Hashmap的对象并将其分配给map引用。为什么?,java,Java,为什么我们用 Map abc=新HashMap(20) 而不是 HashMap abc=新的HashMap(20) 请帮我找出这两者的区别 非常感谢您的帮助。在第一种情况下,abc变量的类型为HashMap,它是Map接口的实现。例如,如果您以后改变主意并想使用TreeMap,您将不得不在代码中更改对HashMap的许多引用,并且可能在通用Map操作足够的情况下使用了HashMap的特性 如果使用Map接口作为变量的类型,则可以轻松更改实现。 当您为重用而设计类时,这一点很重要。如果您有一个将M

为什么我们用

Map abc=新HashMap(20)

而不是

HashMap abc=新的HashMap(20)

请帮我找出这两者的区别


非常感谢您的帮助。

在第一种情况下,
abc
变量的类型为
HashMap
,它是
Map
接口的实现。例如,如果您以后改变主意并想使用
TreeMap
,您将不得不在代码中更改对
HashMap
的许多引用,并且可能在通用
Map
操作足够的情况下使用了
HashMap
的特性

如果使用
Map
接口作为变量的类型,则可以轻松更改实现。
当您为重用而设计类时,这一点很重要。如果您有一个将
Map
作为参数的方法,那么任何
Map
实现都可以用来调用您的方法。因此,调用者可以自由地使用最合适的实现。

这在某种程度上是
Java
中的
代码设计模式,只要可能,您就可以使用
super
类型引用。同样的情况下,您应该避免使用原始类型,并尽可能多地使用泛型类型
HashMap
Map
,这将更具可读性,并且两种类型都是安全的。可能的重复您可能也要检查此答案:是否还有其他用途?一般来说,我们可以随时根据需要更改参考号。我同意。问题应该是“为什么我应该使用
HashMap
而不是
Map
”。您应该始终在对象Hirrchy中使用尽可能高的类型,并且有一个很好的理由说明为什么不在Hirrchy中向上一级,而不是相反。