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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© @克俊 中级黑马   /  2013-10-19 12:36  /  1377 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 @克俊 于 2013-10-19 22:43 编辑

各位黑马师兄师姐,求教一个问题。

我在自学到重载部分时,遇到一个问题,自己脑袋卡壳了,找不到解决方法。

毕老师有讲到,下面代码中的需求1部分和需求2部分的代码改后能利用重载提高代码复用性,但我不知道怎样去改,自己搞了好久都是编译失败,很是崩溃~~~

我的问题是:
1、我无论是注释掉需求1部分的代码,还是注释掉需求2部分的代码,都能输出同样的结果。是为什么呢?我不知道原因~~~~
2、这两部分代码要怎样改才能有效重载,提高代码的复用性呢?像我那样的做法(即注释掉其中任何一部分)就算是实现了重载了吗?


所以,我不得以向黑马的师兄师姐求助。
期待黑马师兄师姐的指教~~~

感激不尽~~


我写的代码如下:
class FunctionOverload15
{
        public static void main(String[] args)
        {
                System.out.println(4+5);
                printHr();

                System.out.println(4+5+6);//因为已经存在需求1,就可以直接调用需求1,来对需求2进行优化。
                printHr();
        }

        public static void printHr()
        {
                System.out.println("---------------");
        }


//需求1、定义一个加法运算,获取两个整数的和。

        public static int add(int x,int y)//add为函数名,定义函数名重点在于体现函数的功能。
        {
                return x+y;
        }


//需求2、定义一个加法运算,获取三个整数的和。
        public static int add(int x,int y,int z)
        {
                return (x+y)+z;//return add(x+y)+z;
        }
}

评分

参与人数 1技术分 +1 收起 理由
特殊服务 + 1

查看全部评分

6 个回复

倒序浏览
本帖最后由 周学彬 于 2013-10-19 13:13 编辑

你定义的两个函数并没有被调用,有两个原因1,你没有调用add函数,你只是打印了几个常数的和
2,即使基调用了add函数,编译器会报错,因为参数形式不匹配。函数调用时,形参要严格按照函数定义的形式传递。你的add函数里面有两个或三个整数,所以,你在调用时使用4+5+6只会得出一个15,这只算一个整数,找不到匹配的重载函数
由于是静态代码段,在别的类里使用时需要使用类名调用,这段代码可以不用。
正确的代码如下:
  1. class FunctionOverload15
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                         int x, y, z;
  6.                         x = 4;
  7.                         y = 5;
  8.                         z = 6;
  9.    
  10.                 System.out.println(add(x, y));
  11.                 printHr();

  12.                 System.out.println(add(x, y, z));//因为已经存在需求1,就可以直接调用需求1,来对需求2进行优化。
  13.                 printHr();
  14.         }

  15.         public static void printHr()
  16.         {
  17.                 System.out.println("---------------");
  18.         }
  19. }
复制代码
需求2的代码注释的也不对:应该把add里面的+改成,。
  1. //需求2、定义一个加法运算,获取三个整数的和。
  2.         public static int add(int x,int y,int z)
  3.         {
  4.                 return (x+y)+z;//return add(x, y)+z;
  5.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
特殊服务 + 1

查看全部评分

回复 使用道具 举报
奇怪,代码怎么显示的这么乱?
稍等,我修改下
回复 使用道具 举报
你的main函数里只是直接输出了4+5和4+5+6的值,而没有调用add函数,你写的两个add函数的参数个数不一样可以构成方法重载,只是你没调用而已
回复 使用道具 举报

如果楼主已经解惑,请将帖子改为提问结束
回复 使用道具 举报
To 金牌黑马 2013-10-20 19:08:19
地板
楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作
如果不会修改请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
        System.out.println(4+5);
            printHr();

            System.out.println(4+5+6);//因为已经存在需求1,就可以直接调用需求1,来对需求2进行优化。
            printHr();                       
                }

                  public static void printHr()
                {
                        System.out.println("---------------");
                }
                  //需求1、定义一个加法运算,获取两个整数的和。
                public static int add(int x,int y)//add为函数名,定义函数名重点在于体现函数的功能。
                {
                        return x+y;
                }
                //需求2、定义一个加法运算,获取三个整数的和。
                public static int add(int x,int y,int z)
                {
                       return add(x,y)+z;
                }
这里就体现了函数的重载,好像楼主你注释的部分//return add(x+y)+z;
本身代码就有问题应该是//return add(x,y)+z;
需要强调的是函数的重载,有利于对代码的复用。希望对你学习有帮助!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马