重载是OO的一个重要特性,然而过度的重载只会带来更多的麻烦。书中一上来就举了一个通过超类与子类类型的参数来重载的例子。
当我们希望根据传入参数的类型来选择重载方法时,由于Java对重载方法的选择是静态的,所以尽量避免通过有继承关系的不同类型来重载。如果一个方法的参数类型(以仅有一个参数为例)是String,而另一个重载的参数类型是int,这样是安全的。而一个是List,另一个是Collection就不安全了。因为重载(overload)方法的选择是静态的,编译时就决定的。与之形成对比的是改写(override)方法的选择是动态的,执行的时候才决定。
有一句忠告是“一个安全而保守的策略是永远不要导出两个具有相同参数数目的重载方法”。但这并不是一个严格要求,从其中的“保守”一词,已经能够看出。我们还是尽量避免两个有继承关系的类型作为重载参数吧,这里需要强调的是Object类型,由于它是所有其他类的超类,所以重载的时候因特别注意。
【Effective Java 学习笔记】系列连载专题请见:
http://tonylian.iteye.com/categories/64208