开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情
方法重载
基本介绍
java中允许同一个类中,多个同名方法存在,但是要求 形参列表不一致
比如:System.out.println(); out是PrintStream类型
OverLoad01.java
重载(OverLoad)的好处:
- 减轻了起名的麻烦
- 减轻了记名的麻烦
快速入门案例
OverLoad01.java
public class OverLoad01 {
public static void main(String[] args) {
// System.out.println(100);
// System.out.println('A');
// System.out.println("adsf");
// System.out.println(true);
// System.out.println(1.1);
MyCalculator myCalculator = new MyCalculator();
System.out.println(myCalculator.calc(1.1,2));
}
}
class MyCalculator{
public int calc(int n1,int n2){
return n1 + n2;
}
public double calc(int n1,double n2){
return n1 + n2;
}
public double calc(double n2,int n1){
return n1 + n2;
}
public int calc(int n1,int n2,int n3){
return n1 + n3;
}
}
案例:类:MyCalculator,方法:calc
calc(int n1,int n2);
calc(int n1,double n2);
calc(double n2,int n1);
calc(int n1,int n2,int n3);
注意事项和使用细节
- 方法名必须相同
- 参数列表必须不同(形参类型或个数或顺序,至少有一样不同,参数名无要求)
- 返回类型:无要求
练习:1.编写程序,类Methods中定义三个重载方法并调用。方法名为m。三个方法分别接收一个int参数,两个int参数,一个字符串参数。分别执行平方运算并输出结果,相乘并将结果输出,输出字符串信息,在主类的main方法中分别调用三个方法。OverLoadExercise.java
public class OverLoadExercise {
public static void main(String[] args) {
Method method = new Method();
Methods methods = new Methods();
System.out.println(method.m(2));
System.out.println(method.m(2,3));
method.m("alsdf ");
System.out.println(methods.max(1,2));
System.out.println(methods.max(2.1,2.1));
System.out.println(methods.max(1.1,2.2,3.3));
}
}
class Method{
public int m(int n1){
return n1 * n1;
}
public int m(int n1,int n2){
return n1 * n2;
}
public void m(String s){
System.out.println(s);
}
}
class Methods{
public int max(int n1,int n2){
return n1 > n2 ? n1 : n2;
}
public double max(double n1,double n2){
return n1 > n2 ? n1 : n2;
}
public double max(double n1,double n2,double n3) {
double max1 = n1 > n2 ? n1 : n2;
return max1 > n2 ? max1 : n2;
}
}
2.在Methods类,定义三个重载方法max,第一个方法,返回两个int值中的最大值,第二个方法,返回两个double值中的最大值,第三个方法,返回三个double值中的最大值,并调用三个方法。
可变参数
基本概念
java允许将同一个类中的多个同名同功能但参数个数不同的方法,封装成一个方法就可以通过可变参数实现
基本语法
访问修饰符 返回类型 方法名(数据类型……形参名)
快速入门案例(VarParameter01.java)
看一个案例 类 GshMethod ,方法sum【可以计算两个数的和,三个数的和,四个数的和。。。】
public class VarParameter01 {
public static void main(String[] args) {
GshMethod hspMethod = new GshMethod();
System.out.println(hspMethod.sum(20,21));
}
}
class GshMethod {
public int sum(int n1, int n2) {
return n1 + n2;
}
public int sum(int n1, int n2, int n3) {
return n1 + n2 + n3;
}
public int sum(int n1, int n2, int n3,int n4) {
return n1 + n2 + n3 + n4;
}
//上面的方法名称相同,功能相同
// 参数个数不同-》使用可变参数优化
//int... 表示接收的是可变参数,类型是int,即可以接收多个(0-多)
//使用可变参数时,可以当作数组使用,即nums可以当作数组
public int sum(int... nums){
// System.out.println("接收的参数个数 = " + nums.length);
int res = 0;
for (int i = 0; i < nums.length; i++){
res += nums[i];
}
return res;
}
}
可变参数细节
VarParameterDetail.java
public class VarParameterDetail {
public static void main(String[] args) {
//可变参数的实参可以为数组
int[] arr = {1,2,3};
T t1 = new T();
// t1.f1(arr);
//可变参数可以和普通类型的参数一起放在形参列表
//但必须保证可变参数放在最后
t1.f1(1,2,1,1,1,1,1,1);
}
}
class T{
public void f1(int i,double j,int... nums){
System.out.println(nums[2]);
}
}
- 可变参数的实参可以为0或多个
- 可变参数的实参可以为数组
- 可变参数的本质就是数组
- 可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数放在最后
- 一个形参列表中只能出现一个可变参数
课堂练习
VarParameterExercise.java
public class VarParameterExercise {
public static void main(String[] args) {
Student student = new Student();
System.out.println(student.showScore("小白",60.1,60.1));
}
}
class Student{
public String showScore(String s,double... nums){
double score = 0;
for (int i = 0; i < nums.length; i++){
score += nums[i];
}
return s + " 有 " + nums.length + "门课,,总分为:" + score;
}
}
有三个方法,分别实现返回姓名和两门课总分,返回姓名和三门课总分,返回姓名和五门课总分,封装成一个可变参数的方法
类名Student方法名showScore