重载--面向对象的鸡肋,强类型语言的软肋
以下言论为新手见解,如有不妥,请不吝赐教。
重载就是一个类里面定义了几个相同名字但不同参数的函数/方法。如下:
1 class BasketballPlayer{ 2 private String sex; 3 private String name; 4 public void test (String name){ 5 ......} 6 public void test (String name,String sex){ 7 ......} 8 }
不过我个人感觉有些时候这个功能比较鸡肋,我还不如像下面那样写简单省事,可惜下面这种写法在JAVA里面用不了,还好在我经常用的C/C++和PHP中都支持:
1 class BasketballPlayer{ 2 private String sex; 3 private String name; 4 public void test (String name,String sex="man"){ 5 ......} 6 }
当然重载它也有实用的时候,比如:
int themax(int a,int b){ return a>b? a : b; } float themax(float a, float b){ return a>b? a : b; }
不过我还是觉得这个不是一个好办法,相同的功能只是不同数据类型就要写那么多遍逻辑完全相同的东西,就是浪费体力啊,要修改还得一个个改,说不定就改漏了。我想可能弱数据类型(比如PHP)是一个更好的解决方案,它自动帮你搞定不同的数据类型了。如下:
1 <?php 2 function themax($a,$b){ //max是系统函数不能用了,所以起名叫themax 3 return $a>$b ? $a : $b; 4 } 5 ?>
目前流行的几门强类型语言的编译器将来会不会,敢不敢,愿不愿把“弱类型”加进去呢。这很难说,可能较长一段时间内都不会。尤其是Java更不可能,有些功能就是 别人早就已经有了,它要过了N久才有,例如switch里面要放个字符串都要到1.7版本才有。目前来说,上面那个终极解决方案也只能在如PHP,JS这 样的弱类型语言上用了,强类型还是得在复制粘贴修改的轮回中痛苦一段时间。