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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谢玲 中级黑马   /  2012-12-18 10:39  /  2935 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

重载和复写有什么区别?怎样区分重载和复写??

评分

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

查看全部评分

7 个回复

倒序浏览
复写是子类的方法覆盖父类的方法,要求方法名和参数都相同
重载是在同一个类中的两个或两个以上的方法,拥有相同的方法名,但是参数却不相同,方法体也不相同,
最常见的重载的例子就是类的构造函数。

评分

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

查看全部评分

回复 使用道具 举报
重载是一个类中,名称相同,但是参数类型或数目不同。重写是子类中重新定义了跟父类的方法。

评分

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

查看全部评分

回复 使用道具 举报
重载是在一个类定义中,可以编写几个同名的方法,但是只要它们的签名参数列表不同,J就会将它们看做唯一的方法;重载可使函数、运算符等处理
不同类型数据或接受不同个数的参数的一种方法;它发生在同一个类中。
例如:
  1. class MainClass
  2. {
  3. struct Vector
  4. {
  5. public double x, y, z;
  6. public Vector(double x, double y, double z)
  7. {
  8. this.x = x;
  9. this.y = y;
  10. this.z = z;
  11. }
  12. public Vector(Vector rhs)
  13. {
  14. x = rhs.x;
  15. y = rhs.y;
  16. z = rhs.z;
  17. }
  18. public override string ToString()
  19. {
  20. return "(" + x + "," + y + "," + z + ")";
  21. }
  22. public static Vector operator +(Vector lhs, Vector rhs)
  23. {
  24. Vector result = new Vector(lhs);
  25. result.x += rhs.x;
  26. result.y += rhs.y;
  27. result.z += rhs.z;
  28. return result;
  29. }
  30. }
  31. static void Main()
  32. {
  33. Vector vect1, vect2, vect3;
  34. vect1 = new Vector(3.0, 3.0, 1.0);
  35. vect2 = new Vector(2.0, -4.0, -4.0);
  36. vect3 = vect1 + vect2;
  37. Console.WriteLine("vect1=" + vect1.ToString());
  38. Console.WriteLine("vect2=" + vect2.ToString());
  39. Console.WriteLine("vect3=" + vect3.ToString());
  40. }
  41. }
  42. 上例定义了一个在数学中常见的矢量相加的+号重载

复制代码
至于复写我还不太懂,就暂时不班门弄斧了,等我学通了再来告诉你吧!

评分

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

查看全部评分

回复 使用道具 举报
重写 是父类和子类之间的同名方法的一种关系
重载 是单个类内部的各种同名方法的一种关系

重写 的方法的签名必须完全一致
重载 的方法的签名可以不一致

评分

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

查看全部评分

回复 使用道具 举报
1方法重载               2方法复写  
概念:1 方法名称相同,参数的个数或者类型不同      2 方法名称相同,参数的个数和类型相同,方法的访问权限不能更严格
使用范围:1 发生在同一个类中 2发生在继承关系中,是由子类进行复写

评分

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

查看全部评分

回复 使用道具 举报
王斌 中级黑马 2012-12-18 17:22:45
7#
重载 ,对于函数重载 就是方法的名字相同,返回值可以不同,但是参数个数或是参数类型必须不同,这样才可区分你要调用的方法,同一个类中
重写, 是类与类之间的=,两个类一定的继承关系的,才可以重写,对重写的要求就是,方法名相同,返回值类型相同,参数个数及类型相同

评分

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

查看全部评分

回复 使用道具 举报
1.
从概念上面来讲
重载: 方法名称相同,参数类型 个数不同
复写:方法名称相同,权限尽量相同,参数类型个数相同
2.
从范围上面来讲
重载:出现在同一个类当中
复写:出现在继承关系中

评分

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

查看全部评分

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