方法重载(method overloading)

Java视频教程

成员方法重载

学习重载之前,我们来了解一下在java中方法的特征。

在java中,每一个方法都有自己的特征,其特征主要是指方法名以及方法的参数。

void method1(){}

void method2(){}

method1()和method2()可以被理解为是两个方法名不同的方法,即方法的特征不一致。

void method1(int x){}

void method1(){}

第一个method1()与第二个method1()虽然名字一样,但是却有不同的参数,因此,这两个同名方法仍有着不同的特征。

对于java编译器来说,它只依据方法的名称、参数的不同来判断两个方法是否相同,如果出现两个名称相同、参数也完全一致的方法,那么编译器就认为这两个方法是完全一样的,也就是说方法被重复定义!

以下定义是错误的:

class ClassName

{

void m1(){}

void m1(){}

}

对于以上两个方法定义语句,java解释器认为这两个方法完全相同,当执行到第二条语句时,它会告诉你方法m1()已在类ClassName中被定义!

可以这样理解,当我们在一个类中不能定义相同名称的多个方法,除非这些方法具有不同的方法特征(参数的不一致)。将上面语句修改为:

class ClassName

{

void m1(int x){}

void m1(){}

}

这样,虽然方法名相同,但由于两个方法的参数不一致,因此,编译器就认为这是两个不同的方法,从而不会产生歧义。

好,在这里,大家可能就会质疑,把其中的某个方法换成不同的名称不也可以正常运行吗?

对,这样确实可以解决问题,但我们知道,在现实中,往往一个类会实现复杂的功能,其中定义的多种方法可能实现的功能意义都是一样,比如我们已经熟悉的System类中的静态方法println(),在该类中println()被定义了多个,每一个方法都有不同的参数,现在我们已知道每一个println()都具有相同的功能:在控制台上输出内容!我们来假想一下,如果按照每个方法定义一个不同名称,那么我们将在System类中定义十多种不同名称的打印方法,虽然功能实现了,首先,我们是否需要编写代码前给这十几种方法取不同名称,并且还得保证名称唯一,这就会增加我们的工作量;其次我们还得记住每一个方法名对应的功能,如果稍有记错,那就会得到错误的结果!

因此,我们有更好的解决办法,通过重载,可以在一个类中定义相同名称、不同参数的实现相同功能的多个方法,这样就避免了给每个方法取不同名称、熟记每个不同名的方法对应的功能的额外工作量,提高了我们的开发效率。

当一个类中的多个同名方法满足以下条件时之一时,即实现了方法重载:

a.不同的参数个数

b.不同的参数类型

c.不同的参数顺序

小测试:以下哪几组方法实现了重载,满足了重载的那一个条件?

组一:

void m1(int x){}

void m1(int x, int y){}

组二:

void m1(int x, String str){}

void m1(String str, int x){}

组三:

void m1(int x, int y){}

void m1(int y, int x){}

组四:

void m1(int x){}

int m1(int x, int y){}

组五:

void m1(int x){}

void m2(int x){}


你可能感兴趣的:(Java)