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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马林康 中级黑马   /  2012-7-18 20:32  /  3741 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 马林康 于 2012-7-18 23:26 编辑

public string b(int a, string name) { return a; }
public void b(string name, int a) { }
这两个方法算不算是方法的重载?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

10 个回复

倒序浏览
本帖最后由 刘秋菊 于 2012-7-19 11:56 编辑

public string b(int a, string name) { return a; }
函数编译出错,应该是
public string b(int a, string name) { return name; }
这样
public string b(int a, string name) { return name; }
  public void b(string name, int a) { }

是方法重载,它们参数顺序不同
方法重载是指在同一个类中方法同名,参数不同,调用时根据实

参的形式,选择与他匹配的方法执行操作的一种技术。

这里所说的参数不同是指以下几种情况:

①  参数的类型不同

②  参数的个数不同

③  参数的个数相同时他们的先后顺序不同

点评

这个回复比较全  发表于 2012-7-19 16:57

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
刘秋菊 发表于 2012-7-18 20:41
是方法重载,它们参数顺序不同
方法重载是指在同一个类中方法同名,参数不同,调用时根据实

public string b(int a, string name) { return a; }
public void b(int a,string name) { }

这个是吗?
回复 使用道具 举报
public string b(int a, string name) { return a; }
public void b(int a,string name) { }

这个不是重载; 因为其签名(返回类型不是签名的一部分)是相同的. 必须定义不同的参数类型.

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
方法重载要参数的个数和类型不一样才能构成方法重载

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
首先从概念上理解方法重载,重载是指方法名称相同, 只是参数个数或类型不同. 方法功能是相同的. 上面的两个方法,一个有返回值,一个没有返回值,明显不是方法重载。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 刘秋菊 于 2012-7-19 11:51 编辑

public string b(int a, string name) { return name; }
public void b(string name, int a) { }
是方法重载,方法重载跟返回值类型 没有关系
回复 使用道具 举报
1.首先解释一下方法的签名:
方法签名由方法名称和一个参数列表(方法的参数顺序和类型)组成。
注意:方法的签名并不包括方法的返回值。虽然每个重载方法可以有不同的返回类型,单返回类型并不足以区分所条用的是哪个方法。
2.在来解释一下什么叫方法重载:
方法重载是指在同一个类中方法同名,参数不同,调用时根据实
参的形式,选择与他匹配的方法执行操作的一种技术。
这里所说的参数不同是指以下几种情况:
①  参数的类型不同
②  参数的个数不同
③  参数的个数相同时他们的先后顺序不同
注意:系统会认为是同一个方法的两种情况,这样的两个方法不可以在同一个类里,否则系统会报错。
⑴返回类型不同,方法名和参数个数、顺序、类型都相同的两个方法
⑵返回类型相同,方法名和参数的个数、顺序、类型都相同的两个方法,但是参数的名字不同
例如:
          ①        protected  void A(){
            Console.WriteLine("aaaaaaaaaaaa"); }
    ②  protected void A(string s, int a){ //正确的方法重载
          Console.WriteLine("ccccccccccc"); }
    ③  protected void A(string a, int s){
          Console.WriteLine("ccccccccccc");
      }
④  protected void A(int a,string s) {
Console.WriteLine("bbbbbbbbbb");
}
①  与②是方法重载
②  与③和④比较一下:②与③是同一个方法,因为他们只是参数的名字不同,②与④是正确的方法重载,因为他们参数的顺序不同
2.适用范围:普通方法和构造方法都可以
3.决定方法是否构成重载有以下几个条件:
◆ 在同一个类中;
◆ 方法名相同;
◆ 参数列表不同。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
许庭洲 黑马帝 2012-7-19 08:44:44
9#
public string b(int a, string name) { return a; }//字符串类型的构造函数
public void b(string name, int a) { }//void类型的构造函数,明显与上面构造函数类型不一致
这2个方法不能构成重载,会有编译错误

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
构成方法的重载与返回值没有关系,所以不能构成方法重载

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
这个肯定不能重载的,必须定义不同的参数类型.

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马