黑马程序员技术交流社区

标题: 重载方法报错问题 [打印本页]

作者: yogaa    时间: 2014-4-19 14:29
标题: 重载方法报错问题
写了一个简单的求和函数,重写了一下fMethod方法,为什么报错呢~
public class Sum{
    public float fMethod(float a,float b){
         return a+b;
    }
    public float fMethod(float c,float d){
         return c+d;
    }
    public static void main(String[] args){
         SumMethod sum = new SumMethod();
         float f = sum.fMethod();
    }
}

作者: Monkey·D·Chas    时间: 2014-4-19 14:43
你在一个类里面写了两次同一个方法---重写是指重写父类的 或者要实现的接口的方法,且方法名和参数列表相同。同一类中可以写重载方法
作者: 微笑=.一瞬间    时间: 2014-4-19 17:14
public class Sum{
    public float fMethod(float a,float b){
         return a+b;
    }
   /* 重载函数的参数要么类型不同,要么个数不同,要么返回值不同,你写的重载值改变了变量名不算重载,你写的这是两个相同的函数。*/
    public float fMethod(float c,float d){
         return c+d;
    }
    public static void main(String[] args){
         SumMethod sum = new SumMethod();
         float f = sum.fMethod();
    }
}
作者: 苍穹的雨    时间: 2014-4-19 20:45
你写的这是两个相同的函数啊,重载的两个函数参数个数不同或是参数类型不同,可你这两个函数参数个数和类型都相同,所以系统视为同一个函数。
你可以这么改:
则最后输出结果为0

作者: AntThinking_toT    时间: 2014-4-19 20:56
楼主有多个错误出现:1.重载是指定义函数时,函数形参的类型不同或个数不同,而返回值不同并不能说明是重载,会出现编译错误,您这里只是改变了一下函数定义时参数名称,实际是同一函数定义,从而出现了编译时的重复定义错误(编译时有提示);2.您的代码里压根就没有SumMethod类,所以出现了can find symbol错误;3.调用fMethod方法压根就没有传入参数,函数定义时用的形参,而使用时要传入实参。
  1. public class Sum
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Sum sum = new Sum();//应该Sum,而不是SumMethod
  6.                 System.out.println(sum.fMethod(23,32));//要传入对应参数
  7.                 System.out.println(sum.fMethod(2.3f,3.2f));//默认数据的是double类型,后面加F或f转float类型,不然编译时会报错
  8.                
  9.         }
  10.         public float fMethod(float a,float b)//重载1
  11.         {
  12.                 return a+b;
  13.         }
  14.         public int fMethod(int a,int b)//重载2
  15.         {
  16.                 return a+b;
  17.         }
  18. }
复制代码

作者: AntThinking_toT    时间: 2014-4-19 21:05
微笑=.一瞬间 发表于 2014-4-19 17:14
public class Sum{
    public float fMethod(float a,float b){
         return a+b;

返回值不同的不能说明是重载,编译时会报函数已定义错误。如下代码:
  1. public class OverloadTest
  2. {
  3.         public static void main()
  4.         {
  5.                 System.out.println("返回值类型为int --- "+add(23,32));
  6.                 System.out.println("返回值类型为double --- "+add(23,32));
  7.         }
  8.         public static int add(int numA,int numB)//返回值类型为int
  9.         {
  10.                 return numA + numB;
  11.         }
  12.         public static double add(int numA,int numB)//返回值类型为double
  13.         {
  14.                 return numA + numB;
  15.         }
  16. }
复制代码



作者: 满兴旺    时间: 2014-4-19 22:37
这可不是重载,本质上你写的两个参数列表是一样的。重载的
作者: 满兴旺    时间: 2014-4-19 22:40
这可不是重载,本质上你写的两个参数列表是一样的。
重载的特点有两个:
1,同函数名,就是函数名是相同的
2,参数列表不一致,可以是参数个数的不一致,也可是参数类型的不一致

还有重载的函数是不能返回类型不一样,那样会让虚拟机君不知所措的。
作者: yogaa    时间: 2014-4-20 15:20
AntThinking_toT 发表于 2014-4-19 20:56
楼主有多个错误出现:1.重载是指定义函数时,函数形参的类型不同或个数不同,而返回值不同并不能说明是重载 ...

大神威武,你说的和我实际运行的情况最相似,完美的还原了当时的情况图像
实际上,我写到第二个fMethod(){}的时候就报错了,后面的代码只是为了保持整段代码功能的完整性写上去的,还真没注意创建的对象名不对,和函数的参数也没有给~感谢您详细的解答~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2