首页 > 代码库 > 重载--面向对象的鸡肋,强类型语言的软肋

重载--面向对象的鸡肋,强类型语言的软肋

以下言论为新手见解,如有不妥,请不吝赐教。

重载就是一个类里面定义了几个相同名字但不同参数的函数/方法。如下:

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 <?php2 function themax($a,$b){    //max是系统函数不能用了,所以起名叫themax3     return $a>$b ? $a : $b;4 }5 ?>

目前流行的几门强类型语言的编译器将来会不会,敢不敢,愿不愿把“弱类型”加进去呢。这很难说,可能较长一段时间内都不会。尤其是Java更不可能,有些功能就是 别人早就已经有了,它要过了N久才有,例如switch里面要放个字符串都要到1.7版本才有。目前来说,上面那个终极解决方案也只能在如PHP,JS这 样的弱类型语言上用了,强类型还是得在复制粘贴修改的轮回中痛苦一段时间。

重载--面向对象的鸡肋,强类型语言的软肋