黑马程序员技术交流社区

标题: override与重载有什么区别 [打印本页]

作者: 许楠    时间: 2012-7-8 11:12
标题: override与重载有什么区别
嗯......这个问题     不懂.....{:soso_e132:}
作者: 小高    时间: 2012-7-8 11:14
重载,函数名相同,但参数类型或个数或顺序不同。其用途比如:可读性强;在构造器的时候根据参数初始化你想要的实例;代码维护性高,重载的方法,处理逻辑的代码通常都在一个方法里,其他方法通常调用偏多
override,是重写,字面意思,就是重写某个方法的业务逻辑。最大用途是多态,其实重载也是一种多态,但二种多态有个差别是,重载是编译时多态,override是运行时多态
作者: 孙宁宇    时间: 2012-7-8 11:49
重载:“两个必须一个可以” 方法名必须相同,参数列表必须不相同 返回值可以不相同 用重载的好处是在处理相同业务中,由于所传递参数不同,可以使用相同的方法名 多用在一个类中
重写:多用于多态的实现 由于不同的类型有不同的实现方法 在每个类中都有自定义的实现方法
  1.   class Operation
  2.     {
  3.      
  4.         int Sum(int x,int y){return x+y;}

  5.         string Sum(string x,string y){return x+y;}
  6.         
  7.     }
复制代码
多态实现不同打招呼的方法
  1.    
  2. abstract class Person
  3.     {
  4.         public virtual void SayHello()
  5.         {
  6.             
  7.         }
  8.     }

  9.     class Child:Person
  10.     {
  11.         public override void SayHello()
  12.         {
  13.             Console.WriteLine("我是小孩");
  14.         }
  15.     }

  16.     class Student : Person
  17.     {
  18.         public override void SayHello()
  19.         {
  20.             Console.WriteLine("我是学生");
  21.         }
  22.     }
复制代码

作者: 戴水平    时间: 2012-7-8 13:54
重载,是函数名相同,但是传递的参数类型不同,还回值类型不同,编译器运行时根据你所转入的参数决定
override是重写的意思 函数名相同,还回值类型相同,传参也相同,运行的时候是子类覆盖父类的运行。
作者: 常静华    时间: 2012-7-8 13:59
1. override
-----------
使用 override 修饰符来修改方法、属性、索引器或事件。重写方法提供从基类继承的成员的新实现。由重写声明重写的方法称为重写基方法。重写基方法必须与重写方法具有相同的签名。
不能重写非虚方法或静态方法。重写基方法必须是虚拟的、抽象的或重写的。
也就是说,用 override 修饰符重写的基类中的方法必须是 virtual, abstract 或 override 方法。



2. 重载
-------
当类包含两个名称相同但签名不同的方法时发生方法重载。

使用重载方法的指南:
a. 用方法重载来提供在语义上完成相同功能的不同方法。
b. 使用方法重载而不是允许默认参数。默认参数的版本控制性能不好,因此公共语言规范(CLS)中不允许使用默认参数。
c. 正确使用默认值。在一个重载方法系列中,复杂方法应当使用参数名来指示从简单方法中假定的默认状态发生的更改。
d. 对方法参数使用一致的排序和命名模式。提供一组重载方法,这组重载方法带有递增数目的参数,以使开发人员可以指定想要的级别的信息,这种情况很常见。您指定的参数越多,开发人员就可指定得越详细。
e. 如果必须提供重写方法的能力,请仅使最完整的重载是虚拟的并根据它来定义其他操作。
// 下面具体解释一下这种模式,只有最后一个方法(参数最完整的方法)是虚方法,在继承了这个类的子类中只要重写(override)这个方法就行了。

public class SampleClass
{
   private string myString;

   public MyClass(string str)
   {
      this.myString = str;
   }

   public int IndexOf(string s)
   {
      return IndexOf (s, 0);
   }

   public int IndexOf(string s, int startIndex)
   {
      return IndexOf(s, startIndex, myString.Length - startIndex );
   }

   public virtual int IndexOf(string s, int startIndex, int count)
   {
      return myString.IndexOf(s, startIndex, count);
   }
}
作者: 侯慧杰    时间: 2012-7-8 16:59
override是对父类方法的重写即对父类方法的覆盖,重载是具有相同函数名不同参数的多个方法,用户调用的时候可以根据用户传递的参数类型或参数个数来确定具体调用哪个方法
作者: 魏振龙    时间: 2012-7-8 18:36
override修饰符,覆写一个基类中的方法
重载则是将同名方法重新写过,达到同名的函数实现不同的功能.从而实现了一个方法有不同的版本.
override与重载的本质区别是,加入了override的修饰符的方法,此方法始终只有一个被你使用的方法

作者: 文硕    时间: 2012-7-8 18:59
重载是方法的名称相同,参数或参数类型不同,进行多次重载以适应不同的需要。
Override 是进行基类中函数的重写。
重载(overload)是面向过程的概念。
Override 是面向对象的概念。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2