这种方式是面向接口编程,是多态的表现形式,使用的条件就是HashMap是Map的实现类,当然存在继承关系也可以,比如:class A extends B{} 那么父类的引用可以指向子类的实例(也就是子类对象)即:B b = new A(); 但是如果B类中没有A类中的方法,需要将b类型先强制类型转换为A类型,才能使用A类中的方法,多态可以使程序更灵活Map类型不仅仅可以引用HashMap类型的,也可以引用TreeMap类型。
为什么能这么写那是因为这个是java中的多态的体现。你可以去适当的学习下多态方面的知识点,另外这么写还有它的优点的。
一般情况下 我们为了提高代码的灵活性,我们都会这样编程,这是一种思想,面向接口编程的思想,比如 Collection collection = new ArrayList() List list = new ArrayList()
1 这样做的好处是显而易见的,当程序的下层需要改变时,只要接口及接口功能不变,则接口之上的上层不用做任何修改。甚至可以在不改动上层代码时将下层整个替换掉。
2 当有时候我们实际当中会不固定的用哪个具体集合的时候,要随着环境变化而变化的时候,我们会把这个Collection collection = new ArrayList()中这个 后面一段代码new ArrayList()会用反射和io的知识点,去加载相应的配置文件然后再创建出一个新集合。