今天看别人的源代码发现如下:
[code]
private static Map table = new Hashtable();
[/code]我知道,table 是一个Map接口,Hashtable 是该接口的实现类。但是为什么不直接定义成:
[code]
private static Hashtable table = new Hashtable();
[/code]他这么写有什么好处?或者有什么意思我没发现的?各位大大帮帮忙,指教一下。
[code]
private static Map table = new Hashtable();
[/code]我知道,table 是一个Map接口,Hashtable 是该接口的实现类。但是为什么不直接定义成:
[code]
private static Hashtable table = new Hashtable();
[/code]他这么写有什么好处?或者有什么意思我没发现的?各位大大帮帮忙,指教一下。
因为map接口可以有很多实现类,如果这样
private static Hashtable table = new Hashtable(); table就只能引用Hashtable 类了而不能引用其他类
比如Hashmap也是map的 实现类
如果你在定义private static Hashtable table = new Hashmap();这样不成了,table就不能引用Hashmap了
因为Hashtable和Hashmap是不同的类
但是如果你用接口定义
private static Map table = new Hashtable();
你就可以用table再引用其他的Map实现类
private static Hashtable table = new Hashmap();再这样写就没错了
这样table就可以引用Map的不同子类了
比如:private Map map = null;public void setMap(Map m) {
this.map = m;
}在调用setMap方法的时候,你可以传入任何实现了Map接口的类!假如你一开始用的Hashtable ,后来你想改成HashMap
这个类的代码你根本就不用动。如果这样:
private Hashtable map = null;public void setMap(Hashtable m) {
this.map = m;
}这样在调用setMap的时候,你只能传入Hashtable类型的对象!
如果想传入别的类型的,你只能再去更改这个类的代码。你说哪个好呢?实在想不出来那有什么好处的话,你就这么想吧:“多一种选择总是好的,用Map的话你就有多种选择,而写死了Hashtable,你就只有这一种选择”!
呵呵。