可能重复:
Type List vs type ArrayList in Java使用接口,而不是CLASSE声明时,一些对象
我正在学习Java语言,我看到它声明某个对象时,他们使用的接口部分代码作为基本类型,但用完整的类进行初始化。
例如:
Map<String,String> map = new HashMap<String,String>();
那么,什么是要使用的接口,而不是地图上的对象声明的类HashMap中的原因是什么?
可能重复:
Type List vs type ArrayList in Java使用接口,而不是CLASSE声明时,一些对象
我正在学习Java语言,我看到它声明某个对象时,他们使用的接口部分代码作为基本类型,但用完整的类进行初始化。
例如:
Map<String,String> map = new HashMap<String,String>();
那么,什么是要使用的接口,而不是地图上的对象声明的类HashMap中的原因是什么?
使用接口的想法是允许程序使用任何Map实现。原则上你可能希望稍后用-say-一个TreeMap来替换HashMap,如果程序的其余部分只假定它是一个Map,那么这个替换是很简单的。
如果程序员宣称map
为HashMap
那么程序员可能会无意中使用som HashMap
特定的方法或字段。然后程序员会被卡在使用HashMap
。
事实上,程序员可以很容易地将其从HashMap
更改为任何其他种类的Map
。
你不能实例化一个接口。这是一个契约,它说“我在这里使用的任何类将实现在接口中声明的方法”。这是java解决缺乏多重继承的方法。
@Mathias和@emory对于通常以Map = new HashMap这种方式完成的原因是正确的,无论使用何种类创建实际的地图,都可以通过TreeMap,HashMap,BidiMap或其他方式自由实现。
我不认为有任何HashMap的具体方法,我不认为有任何暴露的领域。集合接口的实现主要根据其性能语言不同而不同。 – 2012-03-14 22:27:59