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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Spring up 中级黑马   /  2012-12-20 16:02  /  3395 人查看  /  18 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

void show(int a,char b,double c){}

double show(int x,char y,double z){}

上面这两个函数为什么没有重载?       

点评

哥们儿 ,打好基础 。  发表于 2012-12-20 16:22

18 个回复

倒序浏览
一个类中的方法与另一个方法同名,但是参数表不同,这种方法称之为重载方法。
因为你的返回值类型不同所以不是重载

点评

和返回值类型无关 。  发表于 2012-12-20 16:21
回复 使用道具 举报
方法名相同,参数列表不同——重载。你这个是方法名相同,参数列表也相同,怎么重载?
回复 使用道具 举报
上面回答的是错误的,这两个函数参数列表是一样的。函数重载和返回值无关。
可以想像如果根据不同的返回值来判断不同的重载也许可行,但是如果调用方法不是为了获得其返回值,而是为了得到其“副作用”,那么根据返回值类型来判断重载就会遇到麻烦。
即如果你这样定义一个重载:
void f() {}
int f() {}
在关心返回值的情况下,使用int x = f()可以正确调用下面那个方法,但是如果不关心返回值,直接使用 f() 的话编译器就无法正确判断你究竟想调用哪个方法。

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
学习了!{:soso_e200:}
回复 使用道具 举报
override(重写)
1、方法名、参数、返回值相同。
2、子类方法不能缩小父类方法的访问权限。
3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
4、存在于父类和子类之间。
5、方法被定义为final不能被重写。
overload(重载)
1、参数类型、个数、顺序至少有一个不相同。  
2、不能重载只有返回值不同的方法名。
3、存在于父类和子类、同类中。
回复 使用道具 举报
杨志 高级黑马 2012-12-20 21:54:38
7#
看来你要打好基础啊!这个真的是很基础的!不能光去为了技术分啊!
回复 使用道具 举报
1、方法重载,只与函数的参数有关,包括参数的个数,参数的类型,参数的顺序,与其他东西无关,例如返回类型。
2、当然,函数名要完全相同
3、需要注意的问题继续看别人的回答
回复 使用道具 举报
重载函数的条件是方法名相同,参数类型不同,包括参数的类型、数量、顺序,而与返回值类型无关,很明显,这两个方法名相同,但是参数是不符合要求的
回复 使用道具 举报
重载是指同一个类中两个方法,方法名相同参数列表不同,不用看返回值类型,你这个参数列表都一样了,
回复 使用道具 举报
给你个重载小例子研究,涉及到重载和多态。
  1. package com.itheima;
  2. /**
  3. * 9、 编程实现:猫和狗都会叫,但猫是喵喵的叫,狗是汪汪的叫?
  4. * 定义一个动物类,在动物类(animal)中有一个叫的抽象方法。
  5. * 写两个子类,一个猫一个狗,继承自动物类,并实现相应的抽象方法。
  6. * @author Sun
  7. *
  8. */
  9. //定义一个动物类
  10. abstract class Animal {
  11.         //动物类中叫的抽象方法
  12.         abstract void cry();
  13.        
  14. }
  15. //动物类子类狗
  16. class Dogs extends Animal{
  17.        
  18.         //重载父类方法
  19.         public void cry(){
  20.                 System.out.println("小狗,汪汪!");
  21.         }
  22. }

  23. //动物类子类猫
  24. class Cats extends Animal{
  25. //重载父类方法
  26.         public  void cry(){
  27.                 System.out.println("小猫,喵喵!");
  28.         }
  29. }


  30. public class Test9{
  31.         //多态实现动物叫
  32.         public static void main (String[]args){
  33.                 Animal dog=new Dogs();
  34.                 Animal cat=new Cats();
  35.                 dog.cry();
  36.                 cat.cry();
  37.         }
  38. }
复制代码
回复 使用道具 举报
重载记住与返回值类型无关,你前面的int,double代表的是返回值类型。这两个不能同时存在的。
回复 使用道具 举报
重载函数是不用看返回类型 看的的函数名以及函数的参数类型与参数的个数
int  func();
int func(char a);
int func(int a);
int func(long a);
int func(double a);
int func (int a,int b);
int func(int a, double b);
int func(int a,charb):
这些函数均可以构成重载
回复 使用道具 举报
这个真心基础……仔细看看兄弟
回复 使用道具 举报
方法的重载
    class Add
    {
        public int Sum(int para1, int para2)
        {
            return para1 + para2;
        }
        public int Sum(int para1,int para2,int para3)   //相加3个整型
        {
            return para1 + para2 + para3;
        }
        public double Sum(double para1,double para2)    //相加两个double型
        {
            return para1 + para2;
        }
        public string Sum(string para1,string para2)    //相加两个string型
        {
            return para1 + para2;
        }
    }
类中两个以上的方法,取的名字相同,只要使用的参数类型:public double Sum(double para1,double para2)或者参数个数不同:public int Sum(int para1,int para2,int para3),这就叫做方法的重载。
在方法的重载中,不允许仅仅返回值类型不同的方法的重载。例如:public int Sum(int para1,int para2){} public void Sum(int para1,int para2){}
回复 使用道具 举报
void类型不能出现在方法的重载中,
回复 使用道具 举报
在方法的重载中,不允许仅仅返回值类型不同的方法的重载。例如:public int Sum(int para1,int para2){} public void Sum(int para1,int para2){}
回复 使用道具 举报

你好
重载是同一个类的方法名相同参数列表不同,包括参数类型,参数顺序,参数个数不同。
void show(int a,char b,double c){}

double show(int x,char y,double z){}
你这两个函数函数名相同第一个条件满足
参数列表也相同第二个条件不满足。
所以不能重载。
回复 使用道具 举报
这个问题很简单  不用回答那么复杂吧  
函数调用 一般是 对象.函数名   对象引用.函数名  类名.函数名   总是都是用的函数名   假如你定义了这两个函数   那人家调用函数名show() jvm该怎么判断你到底调用的那个函数啊?  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马