是你错了,重载不能用返回值来做判断void f(){}
int f(){
return 1;
}
这2个方法编译器会认为是同一个方法。
不能用返回值来重载,因为方法的调用者不一定会关心方法的返回值...

解决方案 »

  1.   

    我们很易对下面这些问题感到迷惑:为什么只有类名和方法自变量列出?为什么不根据返回值对方法加以区 
    分?比如对下面这两个方法来说,虽然它们有同样的名字和自变量,但其实是很容易区分的: 
    void f() {} 
    int f() {} 
    若编译器可根据上下文(语境)明确判断出含义,比如在 int x=f()中,那么这样做完全没有问题。然而, 
    我们也可能调用一个方法,同时忽略返回值;我们通常把这称为“为它的副作用去调用一个方法”,因为我 
    们关心的不是返回值,而是方法调用的其他效果。所以假如我们象下面这样调用方法: 
    f(); 
    Java 怎样判断f()的具体调用方式呢?而且别人如何识别并理解代码呢?由于存在这一类的问题,所以不能 
    根据返回值类型来区分过载的方法。

    楼主 这下你知道了吧
      

  2.   

    所谓重载就是方法名相同 XX()
     但是参数列表不同,比如参数的顺序,类型,个数等 (就是括号里的东西)
     方法重载跟返回值类型和修饰符无关
      
     那么在执行时,你传给方法哪些参数,java虚拟机就会去找对应的方法执行(所以不用担心混乱)
      

  3.   

    Java重载口诀:同类同名不同参,与修饰符,返回值,异常无关
      

  4.   

    不能的哦,你想想:假如我调用这个方法,但是我不要返回值。那你说我是调用哪个方法呢?你是让机器糊涂了,让机器糊涂了,也就是你错了。
    public class TestOveride{
        public void test1(){
           System.out.println("无参数test1");
        }
        public void test1(String s){
           System.out.println("有参数test1");
        }
        public static void main(String[] args){
           TestOveride t = new TestOveride();
           t.test1("hello");  //你看,假如我不要返回值,你说用返回值来看,我都没有返回值。你说是调用哪一个方法?所以要看参数。
        }
    }
      

  5.   

    class Ex05_p82_5_2_3 {
    /*
    public static void f() {
    System.out.println("f()");
    }
    //compile error: 已在类中定义了方法f()
    public static int f() {
    return 1;
    }
    */ public static int add(int x, int y) {
    return x + y;
    }
    public static String add(String str1, String str2) {
    return str1 + str2;
    } public static void main(String [] args) { String c = add("a", "b");
    System.out.println(c);
    int x = add(1,1);
    System.out.println(x);
    }}这里个人认为应该理解为:不能单单依靠返回值类型来区分方法重载。