重载(overload)和覆盖(override)的区别

     C#是面向对象的语言,面向对象语言有三大特性:继承、封装和多态。C#支持两种多态,第一编译中多态,通过重载(overload)实现;第二种运行时多态,通过覆盖(override)实现。

     重载又分为方法重载和运算符重载。方法重载是指在一个类中,多个方法之间方法名相同,方法的参数类型或个数不同。下面是一个例子。

ContractedBlock.gif ExpandedBlockStart.gif 重载示例
 
   
class Program
{
static void Main( string [] args)
{
Program p
= new Program();
Console.WriteLine(p.add(
1 ));
}

int add( int x) // 第一个名为add的方法
{
return x;
}

double add( double x) // 第二个名为add的方法,但与第一个方法的参数类型不同
{
return x;
}

int add( int x, int y) // 第三个名为add的方法,与第一第二个方法的参数个数不同
{
return x + y;
}
}

 

 还有一种重载是运算符重载。即可以重新定义运算符的功能。基本格式为:

 
  
public static 返回值类型 operator 运算符(参数)
{
// 方法体
}

如下示例,示例中对运算符“++”进行了重载。重载后变成了对Point中的对象各加上10,所以输出结果为“Point.x=20,Point.y=30”。

ContractedBlock.gif ExpandedBlockStart.gif 运算符重载示例
 
   
class Point
{
private int x, y;

public Point( int a, int b)
{
x
= a;
y
= b;
}

public static Point operator ++ (Point p)
{
p.x
+= 10 ;
p.y
+= 10 ;
return p;
}

static void Main( string [] args)
{
Point a
= new Point( 10 , 20 );
a
++ ;
Console.WriteLine(
" Point.x={0},Point.y={1} " ,a.x,a.y);
}
}

 

     覆盖是通过继承和虚方法来实现的。虚方法是指在方法声明时加上virtual修饰符。覆盖需要方法名、方法参数类型、方法参数个数、返回值类型与基类中的虚方法完全一样。在派生类中重载虚方法要加上override修饰符。

ContractedBlock.gif ExpandedBlockStart.gif 覆盖示例
 
   
public class Animal
{
public
virtual voic Eat()
{
Console.WriteLine(“我要吃”);
  }
}
public
class Tiger:Animal
{
public
override void Eat()
   {
   Console.WriteLine(“老虎吃动物”);
   }
}
public
class Test
{
static
void Main()
  {
  Animail an
= new Tiger();
  an.Eat();
  }
}

 此示例中输出的结果是“老虎吃动物”。Animal类中定义了一个虚方法Eat(),Tiger类继承Animal的类,其中覆盖了Eat()方法。在Main函数里面an是实例化Tiger类,虚方法是运行时决定的,所以调用的是Tiger类中的Eat()方法。

 

 重载与覆盖之间的主要区别:

  1.重载要求方法名相同而方法参数类型或个数不同;覆盖是方法名、参数类型和个数都相同。

  2.重载是在同一个类中的不同方法之间;覆盖是子类继承父类,子类方法override父类方法。

  3.重载是在编译时决定;覆盖是在运行时决定。

转载于:https://www.cnblogs.com/pcstx/articles/1682015.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值