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

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

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

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这 样的弱类型语言上用了,强类型还是得在复制粘贴修改的轮回中痛苦一段时间。

时间: 2024-10-07 16:05:15

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

弱类型语言和强类型语言

最近开始频繁接触H5,同事说脚本语言大多都是弱类型语言.看了下下弱类型语言和强类型语言的东西. 动态语言和静态语言.1 动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来.Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言.2 静态类型语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其

动态语言 静态语言 强类型语言 弱类型语言

一 .静态语言的优势到底在哪? 引用 是像Java或者C#这样强类型的准静态语言在实现复杂的业务逻辑.开发大型商业系统.以及那些生命周期很长的应用中也有着非常强的优势 这是一个存在于大家心里常识了.我承认我自己在潜意识里面也觉得静态强类型语言适合开发复杂,大型系统.而弱类型脚本语言不适合开发太复杂,太大型的项目.但是在参与这个讨论过程中,我突然开始置疑这个观点,事实究竟是不是这样的呢? 先定义一下标准: 静态类型语言是指在编译时变量的数据类型即可确定的语言,多数静态类型语言要求在使用变量之前必须

动态语言和静态语言、编译型语言和解释型语言、强类型语言和弱类型语言的分析

一.动态语言和静态语言1. 我们常说的动.静态语言,通常是指: 动态类型语言 Dynamically Typed Language 静态类型语言 Statically Typed Language 可能还有:动.静态编程语言 Dynamic\Statically Programming Language 2.    动态类型语言:在运行期间检查数据的类型的语言例如:Ruby\Python这类语言编程,不会给变量指定类型,而是在附值时得到数据类型.Python是动态语言,变量只是对象的引用,变量a

动态语言、动态类型语言、静态类型语言、强类型语言、弱类型语言

关于如题这几个概念,大部分人应该比较熟悉,但是我昏了好久,所以写下来加深印象. 1. 动态语言 又叫动态编程语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化.比如众所周知的ECMAScript(JavaScript)便是一个动态语言.除此之外如Ruby.Python等也都属于动态语言,而C.C++等语言则不属于动态语言. 而其实我们平时说的"动态语言"应该指的是"动态类型语言".至少我之前一直是这么认为的. 2. 动态类

python——静态语言、动态语言、强类型语言、弱类型语言、脚本语言、解释型语言、编译型语言

静态语言 在编写代码时,必须为变量指定一个明确类型的语言.比如Java.C/C++ 动态语言 在编写代码时,不必为变量指定一个明确的类型,而是由解释器在运行时根据变量的使用情况确定变量的类型.比如python.javascript #python的动态特性 m = 10; m = 'hello' print m #print 'hello' 强类型语言 变量必须有一个确定的类型.比如Java.C/C++.python 弱类型语言 在运行时,变量不必按它原来的类型使用,可以当做其他类型来使用,比如

python语言的鸭子类型和强类型语言的多态

前面讲接口类的时候举过一个有关支付方式的例子,支付方式可以有几种,微信支付,支付宝支付,苹果支付等,这几个不同的支付都统一于支付,像这样几个类都统一于 某一个类或者某一个方法,或者说一个类有不同的形态的情况就属于多态:虽然几种支付方式都归一于支付类,执行的方法一样,但是每一个支付方式都有自己的特性,实现的 形态也不一样,即为多态性. class Payment: # 必要的父类 def pay(self,money): pass class Wechatpay(Payment): # 子类继承父

静态语言与动态语言,强类型语言与弱类型语言

Dynamic Programming Language (动态语言或动态编程语言) Dynamically Typed Language (动态类型语言) Statically Typed Language (静态类型语言) 动态语言,准确地说,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化.比如众所周知的ECMAScript(JavaScript)便是一个动态语言.除此之外如Ruby.Python等也都属于动态语言,而C.C++等语言则不属于动态语言

解释型语言和编译型语言、弱类型语言和强类型语言、动态语言和静态语言的区别

计算机是不能理解除了机器语言以外的任何语言所以必须要把程序员所写的程序语言都翻译成机器语言才能执行程序.程序语言翻译成机器语言的工具,叫做翻译器. 编程语言  ————> 翻译器  ————> 计算机语言(二进制) 翻译器翻译的方式有两种:一是 编译,二是 翻译.两种方式之间对区别在于翻译的时间点不同. 编译器:是在代码执行之前进行编译,生成中间代码文件 解释器:是在运行时进行及时解释,并立即执行(当编译器以解释方式运行的时候,也称之为解释器) 举个栗子: 编译型语言:就像是请客的时候要先把所

弱类型语言、强类型语言?

一.什么是弱类型语言.强类型语言? 强类型和弱类型主要是站在变量类型处理的角度进行分类的. 强类型是指不允许隐式变量类型转换,弱类型则允许隐式类型转换. 所以,关键在于变量数据类型的转换. 二.什么叫隐式类型转换? 隐式是指源码中没有明显的类型转换代码,也就是说,一个变量,你可以直接给他赋值字符串,也可以直接给他赋值数值,你还可以直接让字符串类型的变量和数值类型的变量相加,虽然得出的最终结果未必是你想象的那样,但一定不会报错. 这就是隐式类型转换,弱类型语言,如javascript.php. 比