有时需要在同一个类中定义几个功能类似但参数不同的方法。例如,定义一个将其参数以文本形式输出显示的方法。因为不同类型的数据显示格式不同,需要经过不同的处理。因此,要显示int,float和String类型的数据,则需要为每种类型数据单独编写一个方法,这样就需要定义3个方法。比如,将它们命名为printInt(),printFloat(),printString()。显然这种定义方式不仅显得枯燥,而且要求使用这个类的程序员熟悉多个不同的方法名称,给应用带来麻烦。
Java语言提供了方法重载(overloading)机制。方法重载是允许在一个类的定义中,多个方法使用相同的方法名。当然,前提条件是Java能够区分实际调用的是哪个方法。实际上,Java根据参数来调用适当的方法。
1.成员方法重载
下面以一个输出文本表示的简单方法为例来说明方法的重载。该方法名为println()。要重载方法名,可以进行如下声明:
当调用prin()方法时,系统根据变量的类型选择相应的一个方法。重载方法有两条规则:
1)调用语句的自变量列表必须足够判明要调用的是哪个方法。自变量的类型可能要进行正常的扩展提升(如浮点变为双精度),但在有些情况下这会引起混淆。
2)方法的返回类型可能不同。如果两个同名方法只有返回类型不同,而自变量列表完全相同也是不够的。因为在方法执行前不知道能得到什么类型的返回值,所以也就不能确定要调用的是哪个方法。重载方法的参数表必须不同,即参数个数或参数类型不同。
实际上,java.lang.System类的out变量是java.io.PrintStream类型的。而在PrintStream类中对println()方法进行了重载,定义了多个println()方法。比如:
下面的例4-9对寻求几个不同类型数据最大者的成员方法max()进行了重载。在其运行结果中用println()方法输出float、int等不同类型的数据。不需要对方法println()进行重载,正是由于java的PrintStream类对println()已经进行了重载,所以才能方便地对各种数据类型进行输出显示。
【例4-9】成员方法重载举例。
根据每次产生的随机数,将会产生不同的运行结果,其中一个可能的结果是:(www.xing528.com)
在这些例子中,对同样的功能—“寻求几个不同类型数据的最大者”,
●用同一个方法名max。
●但用不同的参数列表(int,int),(float,float)—参数类型不同,
(int,int,int)—参数个数不同。重载了方法max()。正是对max()进行了重载,才能方便地对不同类型的数据求其最大者,也正是由于在例4-9中没有重载max(double,double)型方法,所以上述程序不具有“寻求两个双精度类型数据的最大者”的功能。请读者验证这一点,作为练习在补充重载max(double,double)型方法后,再次验证重载的功能。
2.构造方法重载
构造方法的重载已在例4-5和例4-6中应用过,这里再举例应用。
【例4-10】构造方法重载举例。
本例在类Xyz中定义了两个构造方法,其中的一个方法参数为空,另一个带有一个int型参数。因此,在创建Xyz的实例时,可以使用两种形式:
因为构造方法的特殊性,它不允许程序员按通常调用方法的方法来调用。构造方法中参数列表的说明方式决定了该类实例的创建方式。例如,在Xyz类中,不能像下面这样创建实例:
这是因为类Xyz中没有定义具有两个变量的构造方法Xyz(int i,int j)。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。