使用其基类实例化派生类有什么好处?

What is the benefit of instantiating a derived class using its base class? Java

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Why are variables declared with their interface name in Java?
How should lists be cast to their conrecte implementations?

例子:

1
Map<Integer, Integer> map = new HashMap<Integer, Integer>();

好的,谢谢。


它是一种称为接口编程的编程实践。


这通常是为了以后可以在另一个实现中交换代码,并且仍然让代码操作相同。例如,如果您决定使用TreeMap而不是HashMap,您只需更改实例化步骤,其余代码仍然可以正常工作。


契约式设计或"接口编程"是确保代码只使用接口所公开的属性/方法的原则,更重要的是,在任何给定的时间都只使用一个主接口。如果一次使用多个接口,这通常是耦合更紧密的标志。

通常,您也不应该在代码中直接实例化对象。您应该将该作业委托给外部实体,以便可以在单个位置对所使用的实现进行任何更改。

有一篇Dobb博士的期刊文章说应该禁止使用"new"关键字(确切的标题类似于"new i s verboten"),但我现在找不到它的链接。


您可以在不影响其余代码的情况下切换实现(例如,在示例中切换到TreeMap,因为它将使用基类,即Map。它将您的代码分离开来,并被认为是针对接口而不是具体实现进行编码的良好编程实践。