1、方法重载
1、概念:
在同一个类
中,多个功能相同
,但是参数列表不同
的多个方法,可以使用相同的名称
,这种多个同名不同参
的方法。
2、作用:
减少了方法名称的数量。
3、调用
(1)根据名称找到对应的方法
(2)根据参数的数量找到对应的方法
(3)根据参数的类型确定最终要调用的方法
首先: 做类型完全匹配
其次: 完全匹配的找不到,再做自动类型提升的匹配
/*
需求:定义多个求和方法
注意:重载方法只限定参数列表不同
*/
public class MethodOverLoad {
public static void main(String[] args) {
//打印/输出调用方法: 传递常量
System.out.println(getSum(10,20));
System.out.println(getSum(10,20,30));
System.out.println(getSum(10.0,20.0));
System.out.println(getSum(10.0,20.0,30.0));
}
//1.定义一个获取两个int数字之和的方法
public static int getSum(int a, int b) {
System.out.println("两个int的求和方法");
return a + b;
}
//2.定义一个获取三个int数字之和的方法
public static int getSum(int a, int b,int c) {
System.out.println("三个int的求和方法");
return a + b + c;
}
//3.定义一个获取两个double数字之和的方法
public static double getSum(double a, double b) {
System.out.println("两个double的求和方法");
return a + b;
}
//4.定义一个获取三个double数字之和的方法
public static double getSum(double a, double b,double c) {
System.out.println("三个double的求和方法");
return a + b + c;
}
}
4、方法重载的注意事项
方法重载中参数列表不同有哪些情况?
1.参数数量不同
2.参数类型不同
3.多个类型,顺序不同
以下方法均能构成方法重载
public class OverLoadNotice {
public static void main(String[] args) {
method(10,10.0);
}
//1.此方法只有一个int类型参数
public static void method(int a) {
}
//2.此方法只有两个int类型参数
//方法2和方法1参数的数量是不同的,可以构成重载
public static void method(int a,int b) {
}
//3.此方法只有一个double类型参数
//方法3和方法2参数的数量是不同的,可以构成重载
//方法3和方法1参数虽然都是只有一个,但是类型不同,可以构成重载
public static void method(double a) {
}
//4.此方法有一个int类型参数和一个double类型参数
public static void method(int a,double b){
}
//5.此方法有一个double类型参数和一个int类型参数
//方法5和方法4,虽然参数都是2个,但是类型的顺序不同
public static void method(double a,int b){
}
}
方法重载与哪些因素无关?
1.与参数名称无关
2.与返回值类型无关
3.与修饰符无关
总结:
在多个方法同名的前提下,
只看多个方法的参数(除了名称以外)有区别,就构成重载
以下方法均不构成重载
public class OverLoadNotice {
public static void main(String[] args) {
}
//1.此方法只有一个int类型参数
public static void method(int a) {
}
//2.此方法只有一个int类型参数
//方法2和方法1,只有参数的名称不同,无法构成重载
/*public static void method(int num) {
}*/
//3.此方法只有一个int类型参数
//方法3和方法1,只有返回值类型不同,无法构成重载
/*public static int method(int a) {
return 0;
}*/
//4.此方法只有一个int类型参数
//方法4和方法1,只有修饰符不同,无法构成重载
/*void method(int a) {
}*/
}
2、方法的参数传递
1、概念:
知识回顾:
形式参数: 定义方法时,()中定义的的变量
实际参数: 调用方法时,()中传入给方法的数值/变量
当我们要调用一个方法时,我们会把指定的数值,传递给方法中的参数
(定义方法时()中定义的变量),
这样方法中的参数就拥有了这个指定的值
,可以使用该值,在方法中运算了。这种传递方式,我们称为参数传递
。
2、基本类型
作为方法参数传递
/*
基本数据类型作为方法参数
注意:
1.基本类型变量: 保存的是具体的数据值
2.基本类型变量作为形式参数,
形式参数的改变,不会影响实际参数
基本类型变量作为形式参数:
定义方法时,()中定义的参数属于基本类型
不会影响实际参数: 调用方法时,()中给出的参数
*/
public class Demo02BaseVar {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a="+a);//10
System.out.println("b="+b);//20
//调用方法
change( a , b );
//调用change方法后,a和b仍然为10和20
System.out.println("a="+a);//10
System.out.println("b="+b);//20
}
public static void change(int a, int b) {
System.out.println("a="+a);//10
System.out.println("b="+b);//20
a = a*10;
b = b*10;
System.out.println("a="+a);//100
System.out.println("b="+b);//200
}
}
3、引用类型
作为方法参数传递
/*
引用数据类型作为方法参数
注意:
1.引用类型变量: 保存的是对象在堆内存空间的地址值,进行参数传递的时候,传递的也是地址值(也是值传递)
2.引用类型变量作为形式参数,通过形式参数找到对应的堆内存空间,修改堆内存空间的内容之后,
通过实际参数看到的一定是修改后的堆内存空间的内容
引用类型作为形式参数,形式参数的改变,会影响实际参数
数组:
1.数组也是一种引用类型: 数组名称保存的也是数组在堆内存空间的地址值
2.数组作为方法参数或者返回值: 传递的都是数组在堆内存空间的地址值
*/
public class RefVar {
public static void main(String[] args) {
int[] arr = { 10 , 20 };
//System.out.println(arr);//数组名称: 保存数组在内存中的地址值[I@1540e00a]
System.out.println("arr[0]="+arr[0]);//10
System.out.println("arr[1]="+arr[1]);//20
//调用方法
change( arr );
//调用change方法后,a和b进行了变更100,200
System.out.println("arr[0]="+arr[0]);//100
System.out.println("arr[1]="+arr[1]);//200
}
public static void change(int[] arr ) {
System.out.println("arr[0]="+arr[0]);//10
System.out.println("arr[1]="+arr[1]);//20
arr[0] = arr[0]*10;
arr[1] = arr[1]*10;
System.out.println("arr[0]="+arr[0]);//100
System.out.println("arr[1]="+arr[1]);//200
}
}