有种原则叫做依赖倒转原则,由继承产生的多态,这样定义的m既是HashMap的实例也是Map的实例,因为HashMap实现在Map又有针对抽象和接口的编程。

解决方案 »

  1.   

    同意楼上的
    这是为了多态的需要
    一般建议是针对接口编程,因此这里是用接口map定义的对象
    这个对象的实例化则由接口实现类来实例化
      

  2.   

    因为在Java Collection framework中实现map接口有HashMap和TreeMap,如果采用Map m=new HashMap(),则如果想改变数据结构为Map m=new TreeMap(),因为以下的代码时根据Map编写的,
    所以不需要任何修改。如果写成了HashMap m = new HashMap(),代码就不容易修改了。
    而且在Java Collection framework中的Set, List接口都应该采用这种写法,你要明白
    Interface和Implementations的用意,看看Java Collection framework文档就明白了。