可能重复:
Why are variables declared with their interface name in Java?
How should lists be cast to their conrecte implementations?
示例:
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
感谢。
答案 0 :(得分:3)
这通常是为了您以后可以交换另一个实现,但仍然可以使代码运行相同。例如,如果您决定使用TreeMap
而不是HashMap
,则可以更改实例化步骤,其余代码仍然可以正常工作。
答案 1 :(得分:3)
这是一种名为programming to an interface的编程实践。
答案 2 :(得分:1)
您可以切换实现(例如在您的示例中切换到TreeMap
)而不影响其余代码,因为它将使用基类,即Map
。
它解耦你的代码,并被认为是一个很好的编程实践来编码接口而不是具体的实现
答案 3 :(得分:1)
Design by Contract或“编程到接口”是确保代码仅使用接口公开的属性/方法的原则,更重要的是,在任何给定时间使用一个主接口。如果您一次使用多个接口,这通常是更紧密耦合的标志。
通常,您不应直接在代码中实例化对象。您应该将该作业委派给外部实体,以便可以在一个地方完成所使用的实现的任何更改。
有一篇Dobb博士的日记文章说,应该禁止使用'new'关键字(确切的标题就像'new is verboten'),但我现在找不到它的链接。