目录
4.可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后
一、方法重载基本介绍
java中允许同一个类,多个同名方法的存在,但要求形参列表不一致,比如:System.out.print(); out是PrintSream类型的对象
二、 方法重载快速入门
public class OverLoad01{
public static void main(String[] args){
MyCalculator cal = new MyCalculator();
System.out.println(cal.calculate(1,6));
System.out.println(cal.calculate(1,6.9));
System.out.println(cal.calculate(1.9,6));
System.out.println(cal.calculate(1,6,10));
}
}
class MyCalculator{
public int calculate(int n1,int n2){//int int 的和
return n1 + n2;
}
public double calculate(int n1,double n2){//int double 的 和
return n1 + n2;
}
public double calculate(double n1,int n2){//double int 的 和
return n1 + n2;
}
public int calculate(int n1,int n2,int n3){//三个int的和
return n1 + n2 + n3;
}
}
三、方法重载细节以及注意事项
1.方法名需要一样才能叫方法重载
2.形式参数列表:必须不同(形参类型或者个数或者顺序,至少有一个不一样 )参数名无要求,形参只在当前方法内生效
3.返回类型:无要求 返回类型不是方法重载的必要条件
四、方法重载练习
1.
a没有构成重载,参数名字不一样不是必要条件,b构成,c构成,d构成,形参个数不一样;e构成;f 不构成,返回类型不是必要条件;g不是,方法名不同
2.
public class OverLoadExercise01{
public static void main(String[] args){
Methods cal = new Methods();
System.out.println(cal.m(90));
System.out.println(cal.m(20,123));
System.out.println(cal.m("Jack"));
}
}
class Methods{
public int m(int n1){//int int 的和
return n1 = n1 * n1;
}
public int m(int n1,int n2){//int double 的 和
return n1 * n2;
}
public String m(String n1){//double int 的 和
return n1;
}
}
3.
public class OverLoadExercise01{
public static void main(String[] args){
Methods cal = new Methods();
System.out.println(cal.m(90,2));
System.out.println(cal.m(20.5,645.7));
System.out.println(cal.m(6.5,8.9,65.0));
}
}
class Methods{
public int m(int n1,int n2){//int int 的和
int n3 = 0;
if(n1 > n2){
n3 = n1;
}else{
n3 = n2;
}
return n3;
//return n1 > n2 ? n1:n2;
}
public double m(double n1,double n2){//int double 的 和
double n3 = 0;
if(n1 > n2){
n3 = n1;
}else{
n3 = n2;
}
return n3;
//return n1 > n2 ? n1:n2;
}
public double m(double n1,double n2,double n3){//double int 的 和
double max = 0;
if(n1 > n2){
max = n1;
}else {
max = n2;
}
if(n3 > max){
max = n3;
}
return max;
//double max = n1 > n2 ? n1:n2;
//return n3 > max ? n3:max; //使用三元运算符
}
}
注意,如果发生自动数据类型转换,会找到对应的形式参数的数据类型跳转,自动转换的跳转优先级较低
例如
System.out.println(cal.m(6.5,8.9,65));
public double m(double n1,double n2,double n3){
double max = n1 > n2 ? n1:n2;
return n3 > max ? n3:max;
}
public double m(double n1,double n2,int n3){
double max = n1 > n2 ? n1:n2;
return n3 > max ? n3:max;
}
会优先执行下面的方法,当下面的方法不存在时,才会 自动转换为double传入上面的方法
五、可变参数基本介绍
概念:
java允许将同一个类多个同名 同功能 但 参数个数 不同的方法,封装成一个方法,就可以通过可变参数形式
语法:
访问修饰符 返回类型 方法名(数据类型...形参名){
}
public class VarParameter01{
public static void main(String[] args){
HspMethod a = new HspMethod();
System.out.println(a.sum(654,16,1561,0));
}
}
class HspMethod{
//计算两个数的和 三个数的和 四个的和。。N个的和
//可以使用方法重载
// public int sum (int n1,int n2){
// return n1 + n2;
// }
// public int sum (int n1,int n2,int n3){
// return n1 + n2;
// }
// public int sum (int n1,int n2,int n3,int n4){
// return n1 + n2;
// }
//上面几个方法只是形式参数不同,可以使用可变参数优化
public int sum (int ... nums){//可以接受n个int 这个nums可以当做数组
System.out.println("接受的参数个数" + nums.length);
int sums = 0;
for (int i = 0;i < nums.length;i++){
sums += nums[i];
}
return sums;
}
}
六、可变参数的细节和注意事项
1.可变参数的实参可以是0个或者任意多个
2.可变参数的实参可以为数组
public class VarParameterDetail{
public static void main(String[] args){
//2.可变参数的实参可以为数组
int arr[] = {1,2,3};
T t1 = new T();
t1.f1(arr);
}
}
class T{
public void f1(int... nums){
System.out.println("长度为" + nums.length);
}
}
3.可变参数的本质就是数组
4.可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后
public class VarParameterDetail{
public static void main(String[] args){
//2.可变参数的实参可以为数组
int arr[] = {1,2,3};
T t1 = new T();
t1.f1("jack",arr);
}
}
class T{
public void f1(String name,int... nums){
System.out.println("长度为" + nums.length);
}
}
5.一个形参列表只能出现一个可变参数
七、可变参数练习
public class VarParameterExercise{
public static void main(String[] args){
int arr[] = {20,50};
T t1 = new T();
System.out.println(t1.f1("jack",arr));
}
}
class T{
public String f1(String name,int... nums){
int sum = 0;
for(int i = 0;i < nums.length;i++){
sum += nums[i];
}
return name + " 总成绩=" + sum;
}
}