首页 理论教育 Java中的方法重载与返回类型的灵活性

Java中的方法重载与返回类型的灵活性

时间:2023-11-26 理论教育 版权反馈
【摘要】:方法重载是允许在一个类的定义中,多个方法使用相同的方法名。2)方法的返回类型可能不同。不需要对方法println()进行重载,正是由于java的PrintStream类对println()已经进行了重载,所以才能方便地对各种数据类型进行输出显示。请读者验证这一点,作为练习在补充重载max型方法后,再次验证重载的功能。

Java中的方法重载与返回类型的灵活性

有时需要在同一个类中定义几个功能类似但参数不同的方法。例如,定义一个将其参数以文本形式输出显示的方法。因为不同类型的数据显示格式不同,需要经过不同的处理。因此,要显示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)。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈