为什么我们使用接口引用到子对象?

时间:2017-06-29 12:16:04

标签: java

为什么我们使用对子对象的接口引用?

例如:

Map m = new HashMap(); 

为什么?

相反,我们可以使用

HashMap hm = new HashMap();

2 个答案:

答案 0 :(得分:1)

您可以稍后将其更改为其他类的对象。例如,

Map m = new HashMap();
m = new TreeMap();

这样您就可以随时轻松更改实施。

需要注意的第二点是,通过使用接口引用,您只能调用在接口中声明的子类的那些方法。

您将无法调用未在接口中声明的子类的方法,因此不会覆盖方法。

答案 1 :(得分:0)

来自Joshua Bloch, Effective Java ,他说如果可能的话,通过接口引用对象会更好。这将为您的程序提供更大的灵活性,如果您决定要切换实现,您需要做的就是更改构造函数中的类名。更改实施的原因可能是更好的性能或额外的功能。

// favorable
List users = new Vector();

// dont do this if possible
Vector users = new Vector();

如果没有为它存在的接口,那么逐个引用对象而不是接口是完全正确的。