方法重载的定义:如果一个类里面包含了两个或两个以上方法名相同但是形参列表不同的方法,则称为方法重载。

Java程序中确定一个方法需要三个要素。对于一个Java程序来说,程序员在使用方法的时候其本质还是通过调用“方法名”的形式来调用方法的,所有只有方法名是唯一的时候才能判断调用的具体是哪一个方法。所以如何在Java程序中确定一个方法是唯一的是基本的语法要求。

如何确定一个方法在Java程序中的唯一性。
1.调用者,也就是方法的所属者,既可以是类,也可以是对象。简单来讲就是如果方法定义在不同的类中,那么即使是两个完全一样的方法,Java程序也可以判定出它们之间的区别。因为在调用方法的时候Java程序是通过类名.方法名或者对象名.方法名的形式来调用的。所以不同类中定义的方法肯定是不同的。
2.方法名,方法的标识。——方法的名字不一样肯定不是同一个方法。
3.形参列表——这个指的是在同一个类定义中,多个方法的方法名相同但是形参列表不同他也不是同一个方法。判断形参列表是否相同主要有三个维度——1.形参个数、2形参的类型、3形参的排列顺序。例如int f(int a, int b, flaot c)和int f(float a,int b, int c)虽然都是三个参数,且三个参数的类型都有int、int、float,但是它们的排列顺序不同也不是同一个方法。

问题1:为什么返回值类型不能用于区分方法重载?
答案:通过分析方法调用的规则来分析解释。
对于方法一int f(){return 0;}和方法二void f(){}两个方法,如果是int a = f();这样来调用我们知道使用的是方法一,但是如果f();这样来调用此时我们就不知道使用的到底是方法一还是方法二了
看下面例子

public class Person
 {
 public static int say(String content){
 System.out.println(content);
 return 0;
 }
 public static void say(String content)//两个方法名参数类型都一样的say方法
 {
 System.out.println(content);
 }
 public static void main(String[] args)
 {
 Person.say(“aaa”);//
 Person.say(“bbb”);//虽然一个有返回值一个没有,但是在使用看不出任何区别
 }
 }//所以在使用的时候无法区分使用的到底是哪个say方法

问题2:被重载的方法包含了形参个数可遍的形参(这种方式是允许的),需要注意哪些问题?——即如何传参调用的才是形参个数可变的那个方法。
看例子:

public class OverloadVarargs
 {
 public void test(String msg)
 {
 System.out.println(“只有一个形参的test方法”);
 }
 public void test(String… books)
 {
 System.out.println(“形参个数可变的test方法”);
 }
 public static void main(String[] args)
 {
 OverloadVarargs ol = new OverloadVarargs();
 ol.test(“aaa”);//1.实际调用的是单个形参的test方法 ol.test(“aaa”, “bbb”);//2.形参个数可变的test方法
 ol.test(new String[]{“aaa”})/3./形参个数可变的test方法
 }
 }


//注意情况一和情况三。都是为了获得字符串"aaa"。直接传入"aaa"调用的是第一个test方法,只有传递new String[]{“aaa”}的时候调用的才是形参个数可变的test方法。因为形参个数可变的参数本质就是一个数组。
在方法重载的时候,要避免出现这种情况。