为什么我们使用对子对象的接口引用?
例如:
Map m = new HashMap();
为什么?
相反,我们可以使用
HashMap hm = new HashMap();
答案 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();
如果没有为它存在的接口,那么逐个引用对象而不是接口是完全正确的。