黑马程序员技术交流社区

标题: override和(重载)overload的区别 [打印本页]

作者: 王伟    时间: 2011-11-27 14:19
标题: override和(重载)overload的区别
本帖最后由 王伟 于 2011-11-27 20:37 编辑

override是什么,override和(重载)overload的区别
作者: 许前刚    时间: 2011-11-27 14:30
覆写(Override)的两个函数的函数特征相同,重载(Overload)的两个函数的函数名虽然相同,但函数特征不同。
Override 是在继承的时候,如果你写的函数与要继承的函数函数特征相同,那么,加上这个关键字,在使用这个子类的这个函数的时候就看不见父类(或超类)的函数了,它被覆盖掉了。
Overload 是重载,就是说函数名相同,函数特征不同,系统会根据你提供的参数来调相应的函数。
作者: 周敏_.net    时间: 2011-11-27 15:00
重载(overload):同一个作用域内发生(比如一个类里面),定义一系列同名方法,但是方法的参数列表不同。这样才能通过传递不同的参数来决定到底调用哪一个。而返回值类型不同是不能构成重载的。

重写(override):继承时发生,在子类中重新定义父类中的方法,子类中的方法和父类的方法是一样的
        例如:基类方法声明为virtual(虚方法),派生类中使用override申明此方法的重写.

重载时,根据参数选择调用的方法;
重写时,访问父类子类皆调用子类的重写方法;



作者: 刘景发    时间: 2011-11-27 17:58
本帖最后由 刘景发 于 2011-11-27 18:05 编辑

verride修饰符是覆写的意思,作用覆写一个基类中的方法。
而重载则是将将同名方法重新写过,达到同名的函数实现不同的功能.从而实现了一个方法有不同的版本.
override与重载的区别可以总结为:
overload(重载):特点(两必须,一可以)
  方法名必须相同,参数列表必须不同,返回值类型可以不同.
比如说:在构造函数中,由于条件限制有的构造函数需要参数有的不需要,这是用重载最合适了.

override(覆写):特点(三相同)
  相同的方法名,相同的参数列表,相同的返回值类型.通过使用override关键字来实现覆写.
类可以重新定义父类的同名虚函数的执行体
派生类中的方法是重写了基类的方法
运行时采用动态绑定的方法
根据对象的类型确定使用的方法

用如下代码表示下两者的区别:
overload在同一个类中具有相同方法(函数)名的不同签名的实现,也就是说方法的名字相同,但参数类型,个数都不相同的(不包括返回类型),如下就是重载
public double GetValue()
{
}
public int GetValue(string s)
{
}

override是在子类中实现父类中的virtual方法(属性也可),或者是abstract方法(属性也可以),如下:
public class A
{
   public virtual void SetValue(string str)
  {
  }
}
public class B:A
{
   string mumber;
   public override void SetValue(string str)
   {
     number = str;  
   }
}




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