java 面向对象练习5 方法重载与可变形参

/*

  • 方法的重载:
  • 1在同一个类中允许存在一个以上的同名方法,前提是他们的参数个数或者参数类型不同
  • (两同一不同:类相同,名相同,参数列表不同)
  • 2重载特点: 与返回值的类型无关,只看参数列表,参数列表必须不同(参数个数与参数类型)
  • 调用时,根据方法参数列表的不同区分方法
  • 3判断是否重载:跟方法的权限修饰符,返回值类型,形参的变量名,方法体都无关。
  • 只用两同一不同判断
  • 4在通过对象调用方法时,如何确定调用的是什么方法:
  • 看方法名
  • 看参数列表
  • 例:
  • int add(int x,int y){//计算两个参数的和
  • return x + y;
  • }
  • int add(int x,int y,int z){//计算三个参数的和
  • return x + y +z;
  • }
  • double add(double x,double y){//计算两个浮点型参数的和
  • return x + y;
  • }
    */

/*

  • 可变个数形参
  • javaSE5.0提供了Varargs(variable number of arguments)机制
  • 允许直接定义能和多个实参相匹配的形参。从而可以使用更简单的方式传递个数可变的实参
  • JDK5.0 以前使用数组形参来定义方法,传入多个同一类型的变量
  • public static void test(int a ,Sting[] books){}
  • JDK5.0 以后使用可变个数形参来定义方法,传入多个同一类型变量
  • public static void test(int a ,Sting…books){}
  • 可变形参的使用
  • 1,格式 :(数据类型 … 变量名)
  • 2,当调用有可变个数形参的方法时,传入参数的个数可以是0个,1个或者多个。
  • 3,当可变个数形参的方法与本类中方法名相同,形参不同的方法之间构成重载。
  • 4,当可变个数形参的方法与本类中方法名相同,形参类型也相同的数组之间不构成重载,二者不能共存
  • 5,一个方法中,可变个数形参最多只能有一个,且声明在参数列表的末尾。(如果在前面,或有多个可变形参,编译器不知道之后输入的参数是否属于可变形参,属于哪个可变形参,使用数组方式无此问题)
    */
package com.atguigu.contact;
import java.util.*;
public class Object5 {
public static void main(String[] args) {
	Scanner scan = new Scanner(System.in);
	//测试重载
	Count c = new Count();
	c.sum(1, 2);//输出1
	//注意:如果sum(int i,int j)方法被注释掉,则因为自动类型提升会执行
	//sum(double i,double j),输出2
	
	OverLoad o = new OverLoad();
    o.MathTest(11, 22);
	o.Max(3.1, 1.2, 9.2);
	//测试可变形参
	Argu a = new Argu();
	a.show("AA");
	a.show("AA","BB");
	//a.show();//两个方法都用可变形参,编译器不确定使用哪个方法
	a.show(1);
	a.show(23,56,12,45);
	a.show(new int[] {});//可变形参方法可以直接填入数组
}
}

class Count{
	public void sum(int i,int j) {
		System.out.println("1");
	}
	public void sum(double i,double j) {
		System.out.println("2");
	}
	public void sum(int i,double j) {
		System.out.println("3");
	}
	public void sum(double j,int i) {
		System.out.println("4");
	}
	public void sum() {
		System.out.println("5");
	}
//	public int sum(int i,int j) { //与是否返回无关,不能构成重载
//		return 0;
//	}
//	public void sum(int m,int n) { //与形参名无关,不能构成重载
//		System.out.println("5");
//	}
//	private void sum(int i,int j) {//与修饰符无关,不能构成重载
//		System.out.println("5");
//	}
//	private void sum(int i,int j) {//与方法体无关,不能构成重载
//	System.out.println();
//}
	
}

class OverLoad{
	public void MathTest(int i) {
		System.out.println(i * i);
	}
	public void MathTest(int i,int j) {
		System.out.println(i * j);
	}
	public void MathTest(double i) {
		System.out.println(i);
	}
	public void Max(int i,int j) {
		int max;
		max = (i >= j)?i:j;
		System.out.println(max);
	}
	public void Max(double i,double j) {
		double max;
		max = (i >= j)?i:j;
		System.out.println(max);
	}
	public void Max(double i,double j,double l) {
		double max;
		max = (i >= j)?i:j;
		max = (max >= l)?max:l;
		System.out.println(max);
	}
}

class Argu{
	public void show(String s) {
		System.out.println("传入了一个数据" + s);
	}
	public void show(String ... s ) {//实际还是创建一个String类型的数组,数组名s,只是语法改变
		System.out.println("又传入了一个数据" + s);//会输出数组s 的首地址值。在方法使用时输入完变量后确定数组地址值与长度
		for (int i = 0; i < s.length; i++) {//遍历输出,其他功能与数组的操作相同
			System.out.println("又传入了一个数据" + s[i]);
		}
	}
//	public void show(String[] s) {             //与可变形参重复,不构成重载
//		System.out.println("又传入了一个数据" + s);
//	}
	public void show(int s) {
		System.out.println("传入了一个数据" + s);
	}
	public void show(int ... s) {
		int sum = 0;
		if(s.length != 0) {
		for (int i = 0; i < s.length; i++) {
			sum += s[i];
		}
		System.out.println("传入数据总和是" + sum);
		}else {
			System.out.println("没有传入数据");
		}
	}
}
发布了47 篇原创文章 · 获赞 1 · 访问量 1075

猜你喜欢

转载自blog.csdn.net/wisdomcodeinside/article/details/103999719
今日推荐