方法重载(OverLoad)
基本介绍
java中允许同一个类中,多个同名方法的存在,但要求形参列表不一致! 比如:System.out.printIn(100) out是PrintStream类型
假如没有方法重载的话, 就会出现printchar printint的打印方式 ,根据类型进行都要打印
重载的好处
1)减轻了起名的麻烦 2)减轻了记名的麻烦
方法重载快速入门
OverLoad01.java
案例:类:MyCalculator方法:calculate
calculate(int n1,int n2) //两个整数的和
calculate(int n1,double n2) //一个整数和一个double的和
calculate(double n2,int n1) //一个double和一个int的和
calculate(int n1,int n2,int n3) //三个int的和
代码示例 :
public class OverLoad01 {
public static void main(String[] args) {
MyCalculator mc = new MyCalculator();
System.out.println(mc.calculate(1,2));
}
}
class MyCalculator{
//下面的四个方法构成了重载
//两个整数的和
public int calculate(int n1,int n2){
return n1 + n2;
}
//一个整数和一个double的和
public double calculate(int n1,double n2){
return n1 + n2;
}
//一个double和一个int的和
public double calculate(double n1,int n2){
return n2 + n1;
}
//三个int的和
public int calculate(int n1,int n2,int n3){
return n1 + n2 + n3;
}
}
这里我们可以看到 ,编写了总共有4个一样名字的方法
我们将方法实例化之后 ,调用类方法的时候 ,就会自动匹配我们传参的值 ,假如为两个int类型的数值 ,那么就会默认调用第一个类方法从而求得类的和
同样的 ,假设传入的参数第一个是int 第二个是double就使用第二个方法 ,反之就是第三个方法
注意事项
1)方法名:必须相同 2)参数列表:必须不同(参数类型或个数或顺序,至少有一样不同,参数名无要求) 3)返回类型:无要求
来试着判断一下
判断题:
与void show(int a,char b,double c)
构成重载的有:b ,c ,d ,e
a) void show(int x,char y,double z)
//a不构成重载,因为类型的位置都是一致的,只是变量名不同
b) int show(int a,double c,char b){}
//方法不同因此可以构成
c) void show(int a,double c,char b){}
//可以构成
d) boolean show(int c,char b){}
//形参个数不一致,但仍然构成
e) void show(double c){}
//方法名一致,构成
f) double show(int x,char y,double z){}
//类型一致因此不构成方法重载
g) void shows(){}
//方法名不同,不构成方法重载
方法重载代码示例
1.编写程序,类Methods中定义三个重载方法并调用。方法名为m。三个方法分别接收一个int参数、两个int参数、一个字符串参数。分别执行平方运算并输出结果,相乘并输出结果,输出字符串信息。在主类的main()方法中分别用参数区别调用三个方法。OverLoadExercise.java
2.在Methods类,定义三个重载方法maxO,第一个方法,返回两个int值中的最大值,第二个方法,返回两个double值中的最大值,第三个方法,返回三个double值中的最大值,并分别调用三个方法。
public class OverLoadExercise {
public static void main(String[] args) {
Methods t1 = new Methods();
t1.m(2);
t1.m(2,3);
t1.m('x');
System.out.println(t1.max(2, 4));
System.out.println(t1.max(3.3, 2.5));
System.out.println(t1.max(6, 4, 3));
}
}
class Methods {
public void m(int n) {
System.out.println("平方为:" + (n * n));
}
public void m(int a, int b) {
System.out.println("相乘结果为:" + (a * b));
}
public void m(char c) {
System.out.println(c);
}
public int max(int n, int m) {
return n > m ? n : m;
//这里借助三元运算符
}
public double max(double n, double m) {
return n > m ? n : m;
}
public double max(double n, double m, double x) {
double max1 = n > m ? n : m;
return max1 > x ? max1 : x;
//这里仍然借助了三元运算符,不过添加了一个中间变量也就是max1
}
}
原创文章,作者:kirin,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/245308.html