在声明某个对象时使用interface而不是classe

时间:2012-03-14 22:17:24

标签: java

  

可能重复:
  Type List vs type ArrayList in Java

我正在研究Java语言,我看到一些代码在声明某些对象时,他们使用了一个接口作为基类型,但是用一个完整的类初始化。

例如:

    Map<String,String> map = new HashMap<String,String>();

那么,在对象声明中使用接口Map而不是类HashMap的原因是什么?

3 个答案:

答案 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或其他任意方式实现它。