我正在研究Java语言,我看到一些代码在声明某些对象时,他们使用了一个接口作为基类型,但是用一个完整的类初始化。
例如:
Map<String,String> map = new HashMap<String,String>();
那么,在对象声明中使用接口Map而不是类HashMap的原因是什么?
答案 0 :(得分:2)
使用该接口的想法是允许程序使用任何Map实现。原则上你可能希望稍后用-say-一个TreeMap替换HashMap,如果程序的其余部分只假定它是一个Map,那么这个替换是微不足道的。
答案 1 :(得分:1)
如果程序员将map
声明为HashMap
,则程序员可能会无意中使用som HashMap
特定方法或字段。那么程序员将会使用HashMap
。
实际上,程序员可以轻松地将其从HashMap
更改为任何其他类型的Map
。
答案 2 :(得分:0)
您无法实例化界面。这是一个合同,上面写着“我在这里使用的任何类都将实现接口中声明的方法”。这是java解决缺乏多重继承问题的方法。
@Mathias和@emory是正确的,因为它通常以这种方式使用Map = new HashMap,无论什么类创建使用的实际地图都可以使用TreeMap,HashMap,BidiMap或其他任意方式实现它。