方法重载
- 若方法名称相同,参数列表不同,这样的方法之间构成重载关系(Overload)
重载的体现形式
- 方法重载的主要形式体现在:参数的个数不同、参数的类型不同、参数的顺序不同,与返回值类型和形参变量名无关,但建议返回值类型最好相同。
- 判断方法能否构成重载的核心:调用方法时能否加以区分。
练习题目
编程实现为Point类添加重载的成员方法:
up() – 实现纵坐标减1的功能。
up(int dy) – 实现纵坐标减去参数指定数值的功能。
测试重载方法的调用规则
/*
编程实现Point类的定义
*/
public class Point {
int x; // 用于描述横坐标的成员变量
int y; // 用于描述纵坐标的成员变量
// 自定义无参构造方法
Point() {}
// 自定义有参构造方法
Point(int x, int y) {
this.x = x;
this.y = y;
}
// 自定义成员方法实现特征的打印
void show() {
System.out.println("横坐标是:" + x + ",纵坐标是:" + y);
}
// 自定义成员方法实现纵坐标减1的行为
void up() {
y--;
}
// 自定义成员方法实现纵坐标减去参数指定数值的行为
void up(int y) {
this.y -= y;
}
public static void main(String[] args) {
// 1.使用无参方式构造对象并打印特征
Point p1 = new Point();
p1.show(); // 0 0
// 2.使用有参方式构造对象并打印特征
Point p2 = new Point(3, 5);
p2.show(); // 3 5
System.out.println("------------------------------------");
// 3.调用重载的成员方法
p2.up();
p2.show(); // 3 4
p2.up(2);
p2.show(); // 3 2
}
}
横坐标是:0,纵坐标是:0
横坐标是:3,纵坐标是:5
------------------------------------
横坐标是:3,纵坐标是:4
横坐标是:3,纵坐标是:2
测试重载:
/*
编程实现方法重载主要形式的测试
*/
public class OverloadTest {
// 自定义成员方法
void show() {
System.out.println("show()");
}
void show(int i) { // ok 体现在方法参数的个数不同
System.out.println("show(int)");
}
void show(int i, double d) { // ok 体现在方法参数的个数不同
System.out.println("show(int, double)");
}
void show(int i, int j) { // ok 体现在方法参数的类型不同
System.out.println("show(int, int)");
}
void show(double d, int i) { // ok 体现在方法参数的顺序不同
System.out.println("show(double, int)");
}
/*
void show(double a, int b) { // error 与参数变量名无关
System.out.println("show(double, int)");
}
*/
/*
int show(double d, int i) { // error, 与返回值类型无关
System.out.println("show(double, int)");
}
*/
public static void main(String[] args) {
// 1.声明OverloadTest类型的引用指向该类型的对象
OverloadTest ot = new OverloadTest();
// 2.调用show方法
ot.show();
ot.show(66);
ot.show(66, 3.14);
ot.show(66, 118);
ot.show(3.14, 118);
//ot.show(3.14, 66);
}
}
show()
show(int)
show(int, double)
show(int, int)
show(double, int)
重载的实际意义
方法重载的实际意义在于调用者只需要记住一个方法名就可以调用各种不同的版本,来实现各种不同的功能。
如:java.io.PrintStream类中的println方法。