我有点困惑,正在寻找关于声明和实例化 Map 的两种不同方法的差异和不同好处的一些说明。
和有什么区别
Map<String, String> myMap = new HashMap<String, String>;
和
HashMap<String, String> myMap = new HashMap<String, String>;
声明超类变量然后用子类实例化它的好处或原因是什么?
我有点困惑,正在寻找关于声明和实例化 Map 的两种不同方法的差异和不同好处的一些说明。
和有什么区别
Map<String, String> myMap = new HashMap<String, String>;
和
HashMap<String, String> myMap = new HashMap<String, String>;
声明超类变量然后用子类实例化它的好处或原因是什么?
第一个版本使用 Hashmap 来实现,但只在 myMap 中公开 Map 的成员。
也就是说,你得到了HashMap的功能,但只能通过Map的接口。这样做是为了让您可以更改实现,但仍使用相同的接口成员。
这称为“接口编程”。(Map
是一个接口,而不是一个类。)这允许只需要操作而不关心它到底是Map
哪种类型的代码。Map
如果你觉得合适的话,你可以很容易地把HashMap
for 换掉,比如 a ,而且没有其他代码会改变。TreeMap
其他类似问题:
其他参考: