A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yogaa 中级黑马   /  2014-4-19 14:29  /  1456 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

写了一个简单的求和函数,重写了一下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();
    }
}

评分

参与人数 1黑马币 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

8 个回复

倒序浏览
你在一个类里面写了两次同一个方法---重写是指重写父类的 或者要实现的接口的方法,且方法名和参数列表相同。同一类中可以写重载方法
回复 使用道具 举报
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();
    }
}

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  • 分析下你写的程序:
  • 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();  //这里找不到合适参数匹配的函数
  •        }
  • }
你写的这是两个相同的函数啊,重载的两个函数参数个数不同或是参数类型不同,可你这两个函数参数个数和类型都相同,所以系统视为同一个函数。
你可以这么改:
  • public class Sum
  •        public float fMethod(float a,float b)
  •        {
  •               return a+b;
  •        }
  •        public float fMethod()
  •       {
  •               return 0;
  •        }
  •        public static void main(String[] args)
  •        {
  •               SumMethod sum = new SumMethod();
  •               float f = sum.fMethod();
  •               System.out.println(f);
  •        }

则最后输出结果为0

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼主有多个错误出现: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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 赞一个!

查看全部评分

回复 使用道具 举报
微笑=.一瞬间 发表于 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. }
复制代码


回复 使用道具 举报
这可不是重载,本质上你写的两个参数列表是一样的。重载的
回复 使用道具 举报
这可不是重载,本质上你写的两个参数列表是一样的。
重载的特点有两个:
1,同函数名,就是函数名是相同的
2,参数列表不一致,可以是参数个数的不一致,也可是参数类型的不一致

还有重载的函数是不能返回类型不一样,那样会让虚拟机君不知所措的。
回复 使用道具 举报
yogaa 中级黑马 2014-4-20 15:20:59
9#
AntThinking_toT 发表于 2014-4-19 20:56
楼主有多个错误出现:1.重载是指定义函数时,函数形参的类型不同或个数不同,而返回值不同并不能说明是重载 ...

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