什么是方法重载
一般的方法重载
构造方法重载
[@more@]
Java中方法重载是指多个方法名称相同,但是参数的个数或参数数据类型不同的多个方法出现在同一个类中。像这种在同一个类中存在多个名称相同参数列表不同的方法的形式我们称为方法的重载。
其实,我们生活中也有许多的行为重载的案例。例如,一个动物园的训兽师,既要训练猴子,又要训练小狗,有时同时要训练两个小动物合作。虽然训练的对象不同,但我们一般称这个行为为训练。那么训练这一行为就构成了生活中的方法重载。
根据前面的描述,我们可以分析出这样的结果:
1、 把训兽师抽象成一个类。
2、 训兽师有3个方法,方法名称都为训练
3、 这个3个方法有不同的参数,分别是练猴子、小狗及猴子和小狗一起训练
4、 这个3个方法的具体实现各不相同
public class Beastmaster{
public void train(Dog dog){
//训练小狗站立、排队、做算术
…
}
public void train(Monkey monkey){
//训练小猴敬礼、翻筋斗、骑自行车
…
}
public void train(Monkey monkey,Dog dog){
//训练小猴骑着自行车带着小狗去兜风
}
}
从上例我们可以看出,当我们给训兽师不同的动物时,他会针对不同的动物做不同的训练,但训兽师的行为我们统称训练。
在Java中,允许方法名称相同,但是参数列表不同的多个方法出现在同一个类中,像这种在一个类中存在多方法名称而参数不同的方法的形式称为方法的重载。如例12所示。
实例11
package org.hopetech.l01;
public class Addition {
public double add(int x,int y){
return x + y;
}
public double add(double x,double y){
return x+y;
}
public double add(float x,float y){
return x+y;
}
public double add(int x,int y,int z){
return x+y+z;
}
public String add(String x,String y){
return x+y;
}
public String add(String x,double y){
return x+y;
}
}
这个例子是计算结定值的和。在Addition类中提供了6个计算和的方法。第1个add()方法给定的两个参数全部是int类型的,第2个add()方法给定的两个参数全部是double类型的,第3个add()方法两个参数全部是float类型的,第4个add()方法参数类型虽然与第1个add()方法相同,但它有3个参数,因此也构成方法重载,第5个add()方法的参数是String类型,表示将两个字符串连在一起,第6个add()方法是将字符串与数字连接在一起。测试结果如实例12所示,运行结果如图1.6
实例12
package org.hopetech.l01;
public class AdditionTest {
public static void main(String[] args) {
Addition addition = new Addition();
System.out.println("add(3,5)=" + addition.add(3, 5));
System.out.println("add(12.5f,5.0f)="
+ addition.add(12.5f, 5.0f));
System.out.println("add(3.25,5.5)="
+ addition.add(3.25, 5.5));
System.out.println("add(3,5,12)="
+ addition.add(3, 5, 12));
System.out.println("add("姓名:","罗治国")="
+ addition.add("姓名", "罗治国"));
System.out.println("add("年龄:",24)="
+ addition.add("年龄", 24));
}
}
图1.6 实例12运行的结果
在方法重载中,可不可以根据方法的返回值来区分方法呢?如果两个方法名称相同而且参数数也相同,仅仅是返回值不同,编译器是无法做出判断的。因此在方法重重载中,Java不支持使用方法的返回值来实现方法的重载。
同一般方法的重载一样,构造方法也同样可以重载。很多时候,在一个类中可能有多个构造方法,而构造方法的名字一定是和类名相同的,因此只要构造方法的参数个数不同,或者是参数的类型不同,或者是不同数据类型的参数顺序不相同,就可以构成对构造方法进行重载。如实例13所示。
实例13
package org.hopetech.l01;
public class Employee6 {
private String name; // 员工姓名
private int age; // 员工年龄
public Employee6() {
this.name = "李东";
this.age = 28;
}
public Employee6(String name) {
this.name = name;
this.age = 28;
}
public Employee6(String name,int age){
this.name = name;
this.age = age;
}
/**
* 员工进行自我介绍
*/
public void selfIntroduction() {
System.out.println("我是" + name + ",我今年有" + age + "岁了!");
}
}
这里定义了三个构造方法。但参数列表不相,这就是构造方法重载。我们可以通过传递不同的参数来调用不同的构造方法。如实例14,运行结果如图1.7所示
实例14
package org.hopetech.l01;
public class Employee6Test {
public static void main(String[] args) {
//使用带参构造方法实例化一个员工
Employee6 employee1 = new Employee6();
Employee6 employee2 = new Employee6("杨眯");
Employee6 employee3 = new Employee6("罗治国",30);
//调用员工自我介绍的方法
employee1.selfIntroduction();
employee2.selfIntroduction();
employee3.selfIntroduction();
}
}
图1.7 实例14
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16657027/viewspace-1041518/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/16657027/viewspace-1041518/