27_重载
方法重载的概念
- 若方法名相同,参数列表不同,这样的方法之间构成重载关系(Overload)。
重载的体现形式
-
方法重载的主要形式体现在:参数的个数不同、参数的类型不同、参数的顺序不同,与返回值类型(不考虑接收返回值的情况下,两个方法的效果是一样的)和形参变量名(虽然只是变量名不一样,但是其它的都一样,根本原因,我在main方法中调用的时候无法分清到底调用的是哪一个方法,因为传递的实参两个方法都能接)无关,但建议返回值类型最好相同(如果方法的返回值都相同,无论我调用哪个版本,都是统一的处理方式)。
-
判断方法能否重载的核心:调用方法时能否加以区分。
-
/* 编程实现方法重载主要形式的测试 */ 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 与参数的变量名无关 不可以重载 错误: 已在类 OverloadTest中定义了方法 show(double,int) System.out.println("show(double, int)"); } */ /* int show(double d, int i){ // error 与返回值类型无关 不可以重载 错误: 已在类 OverloadTest中定义了方法 show(double,int) 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, 66.66); ot.show(66, 188); ot.show(3.14, 188); } } -------------------------------------------- D:\拉勾学习\JavaBasics笔记\第一阶段_JavaSE\模块二_Java面向对象编程\Code\任务2:方法和封装>java OverloadTest show() show(int) show(int, double) show(int, int) D:\拉勾学习\JavaBasics笔记\第一阶段_JavaSE\模块二_Java面向对象编程\Code\任务2:方法和封装>javac OverloadTest.java OverloadTest.java:27: 错误: 已在类 OverloadTest中定义了方法 show(double,int) void show(double a, int b){ // OK 可以重载 具体体现在方法参数的顺序不同 ^ 1 个错误
Peron 类 // 自定义成员方法实现年龄增长一岁的行为 void grow() { age++; } // 自定义成员方法实现年龄增长参数指定数值的行为 void grow(int i) { age += i; } main 方法 // 4、实现重载方法的调用和测试 Person p4 = new Person("佘儿", 21); p4.show(); // 我是佘儿,今年21岁了! p4.grow(); // 我是佘儿,今年22岁了! p4.show(); p4.grow(15); p4.show(); // 我是佘儿,今年37岁了!
练习题目
-
编程实现为Point类添加重载的成员方法:
- up() - 实现纵坐标减1的功能。
- up(int dy) - 实现纵坐标减去参数指定数值的功能
-
测试重载方法的调用规则
Point 类 // 自定义成员方法实现纵坐标减1的功能。 void up() { y --; } // 自定义成员方法实现纵坐标减去参数指定数值的功能 void up(int dy) { y -= dy; } main 方法 // 3、测试重载方法的调用规则 p2.show(); // 横坐标是:3,纵坐标是:5 p2.up(); p2.show(); // 横坐标是:3,纵坐标是:4 p2.up(2); p2.show(); // 横坐标是:3,纵坐标是:2
重载的实际意义
- 方法重载的实际意义在于调用者只需要记住一个方法名就可以调用各种不同的版本,来实现各种不同的功能。
- 如:java.io.PrintStream类中的println方法