摘要:Java中存在两种多态:重载(Overload)和重写(Override)。其中,重写是与继承有关的多态。方法重载是两种多态的一种,例如,你让一个人执行“求面积”操作时,他可能会问题你求什么面积。所谓多态性,是指可以向功能传递不同的消息,一边让对象根据相应的消息来产生相应的行为。对象的行为通过类中的方法来实现,那么行为的多态性就是方法的重载。
说明丨本文来源网络或教材丨供学习交流用丨侵删
1、方法重载的语法规则
方法重载的意思是:一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同。两个方法的参数不同是指满足下列之一:
- 参数个数不同
- 参数个数相同,但参数列表中的某个参数的类型不同。
【例子】下面的例子中People类中的hello方法是重载方法。
class People {
float hello (int a, int b){
return a+b;
}
float hello (long a, int b){
return a-b;
}
double hello (double a, int b){
return a*b;
}
}
public class Example {
public static void main (String args []){
People tom = new People();
System.out.println(tom.hello(10,20));
System.out.println(tom.hello(10L,20));
System.out.println(tom.hello(10.0,20));
}
}
【结果】上述例子运行结果如下所示:
30.0
-10.0
200.0
注:方法的返回类型和参数的名字不参与比较,也就是说,如果两个方法的名字相同,即使返回类型不同,也必须保证参数不同。
2、避免重载出现歧义
重载方法之间必须保证相互的参数不同,但需要小心的是,重载方法在被调用时可能出现歧义调用。例如,下面的Dog类中的cry方法就是容易引发歧义的重载方法(Dog类没有语法错误):
class Dog {
static void cry (double m, int n){
System.out.println("小狗");
}
static void cry (int m, double n){
System.out.println("small dog");
}
}
【情况1】对于上述Dog类,若调用Dog.cry(10.0, 10); 则输出的信息是“小狗”。
【情况2】若调用Dog.cry(10, 10.0); 则输出的i信息是“small dog”。
【情况3】若调用Dog.cry(10, 10); 则无法通过编译(提示信息:对cry的引用不正确),因为Dog.cry(10, 10); 不清楚应当执行重载方法中的哪一个(出现歧义调用)。