声明一个超类变量,然后用Java中的子类实例化它

时间:2013-07-17 20:36:35

标签: java inheritance hashmap declaration instantiation

我有点困惑,并且正在寻找一些关于地图声明和实例化的两种不同方法的差异和不同好处的澄清。

之间有什么区别
Map<String, String> myMap = new HashMap<String, String>;

HashMap<String, String> myMap = new HashMap<String, String>;

声明超类变量然后用子类实例化它的好处或原因是什么?

2 个答案:

答案 0 :(得分:1)

这称为“编程到界面”。 (Map是一个接口,而不是一个类。)这允许只需Map次操作的代码不关心它实际上是哪种Map

如果您认为合适,可以轻松地为HashMap切换TreeMap,而其他代码也不会更改。

其他类似问题:

其他参考资料:

答案 1 :(得分:1)

第一个版本使用Hashmap进行实现,但只在myMap中公开Map的成员。

换句话说,您可以获得HashMap的功能,但只能通过Map的界面获得。它以这种方式完成,以便您可以更改实现,但仍然使用相同的接口成员。