面向对象03-方法重载、可变参数-Java

重载

1、介绍重载

java 中允许同一个类中,多个同名方法的存在,但要求 形参列表不一致
比如:System.out.println(); out 是 PrintStream 类型

注意事项
(1)方法名:必须相同
(2)形参列表:必须不同(形参类型或个数或顺序,至少有一样不同,参数名无要求)
(3)返回类型:无要求

2、重载的好处

  1. 减轻了起名的麻烦
  2. 减轻了记名的麻烦

3、案例

案例一

案例:类:MyCalculator 方法:calculate
1 calculate(int n1, int n2) //两个整数的和
2 calculate(int n1, double n2) //一个整数,一个 double 的和
3 calculate(double n2, int n1)//一个 double ,一个 Int 和
4 calculate(int n1, int n2,int n3)//三个 int 的和

	class MyCalculator {
		public int calculate(int n1, int n2) {
			return n1 + n2;
		}
	
		public double calculate(int n1, double n2) {
			return n1 + n2;
		}
	
		public  double calculate(double n1, int n2) {
			return n1 + n2;
		}
	
		public int calculate(int n1, int n2,int n3) {
			return n1 + n2 + n3;
		}
	}

案例二
System.out.println(method.max(10.0, 1.4, 30)); 会调用哪一个?
会调用下面哪个max,因为不需要类型转换,自动匹配到int了

	public double max(double n1, double n2, double n3) {
		System.out.println("max(double n1, double n2, double n3)");
		//求出 n1 和 n2 的最大值
		double max1 = n1 > n2 ? n1 : n2;
		return max1 > n3 ? max1 : n3;
	}
	
	public double max(double n1, double n2, int n3) {
		System.out.println("max(double n1, double n2, int n3)");
		//求出 n1 和 n2 的最大值
		double max1 = n1 > n2 ? n1 : n2;
		return max1 > n3 ? max1 : n3;
	}

可变参数

1、介绍

java 允许将同一个类多个同名同功能参数个数不同的方法,封装成一个方法。
就可以通过可变参数实现

  • 与重载的不同:可变参数实现封装方法,要求参数个数不同

2、基本语法

访问修饰符 返回类型 方法名(数据类型… 形参名) {
}

3、案例

计算 2个数的和、3个数的和、4、5、6…
可以使用方法重载,如下代码,但太过重复

	class Method1 {
		//可以计算 2个数的和、3个数的和、4、5、6......
		//可以使用方法重载
		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; 
		}
	}

使用可变参数优化
(1) int… 表示接受的是可变参数,类型是 int ,即可以接收多个 int(0-多)
(2) 使用可变参数时,可以当做数组来使用 即 nums 可以当做数组
(3) 遍历 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;
}

4、注意事项

(1)可变参数的实参可以为0个或任意多个。
(2)可变参数的实参可以为数组。
(3)可变参数的本质就是数组.
(4)可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后
(5)一个形参列表中只能出现一个可变参数

进一步说明(2)

	public class VarParameter01 {
		public static void main(String[] args){
			int arr[] = {1, 2, 3};
			T t1 = new T();
			t1.f1(arr);
		}
	}
	
	class T {
		public void f1(int... nums) {
			System.out.println("长度=" + nums.length);
		}
	}

在这里插入图片描述
进一步说明(4)

	public void f2(String str, double... nums) {
	}

	public void f3(double n1, double... nums) {		
	}

例题

有三个方法,分别实现返回姓名和两门课成绩(总分),
返回姓名和三门课成绩(总分),返回姓名和五门课成绩(总分)。
封装成一个可变参数的方法

学习这个return怎么写的

	public String showScore(String name ,double... scores ) {
		double totalScore = 0;
		for(int i = 0; i < scores.length; i++) {
			totalScore += scores[i];
		}
		return name + " 有 " +scores.length + "门课的成绩总分为=" + totalScore;
	}

本笔记是对韩顺平老师的Java课程做出的梳理。方便本人和观看者进行复习。
课程请见: https://www.bilibili.com/video/BV1fh411y7R8/?spm_id_from=333.999.0.0&vd_source=ceab44fb5c1365a19cb488ab650bab03

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值