Warning: Undefined array key 0 in /www/wwwroot/w/show/success.php on line 261

Warning: Trying to access array offset on value of type null in /www/wwwroot/w/show/success.php on line 261
_higrid.net-嗨网
当前位置:嗨网首页>书籍在线阅读

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

Warning: Undefined array key 0 in /www/wwwroot/w/show/success.php on line 266

Warning: Trying to access array offset on value of type null in /www/wwwroot/w/show/success.php on line 266

Warning: Undefined array key 0 in /www/wwwroot/w/show/success.php on line 266

Warning: Trying to access array offset on value of type null in /www/wwwroot/w/show/success.php on line 266

10.2.2 多态的实现

C#中支持基于接口的多态和基于继承的多态,基于继承的多态设计在基类中定义方法,并在派生类中重写方法。多态和重写是紧密联系的,重写是实现多态的重要手段。重写基类方法就是修改它的实现,或者说在派生类中对继承的基类方法重新编写。在基类中用virtual关键字声明的方法(叫做虚拟方法)在派生类中可以重写,虚拟方法语法如下。

访问修饰符 virtual 返回类型 方法名()
{
    //方法体
}

在派生类中使用override关键字来声明重写,以实现对基类中的虚拟方法修改或重新编写。如在【范例10-1】的Person类中声明了一个Display方法用于显示姓名、年龄和性别等信息。代码如下。

01  public void Display()
02  {
03          Console.WriteLine("{0}是{1}性,年龄为{2}", this._name, this._gender, this._age);
04  }

Person的派生类Student和Teacher调用Display时都会显示与姓名、年龄和性别类似的信息,要想使显示学生的信息和显示的教师不一样,就需要使用virtual关键字把基类中的Display方法定义成虚拟方法,使用override关键字在派生类中重写Display方法。代码如下。

01  public  virtual void  Display()         //基类Person中定义成虚拟方法,使用virtual关键字
02  {
03          Console.WriteLine("{0}是{1}性,年龄为{2}", this._name, this._gender, this._age);
04  }

在派生类Student中重写基类中的虚拟方法,使用override关键字,代码如下。

01  public override void Display()                   //重写基类中的Display方法
02  {
03          Console.WriteLine("这是一个学生:");      //在派生类中编写新代码
04          base.Display();                          //调用基类的Display方法显示
05  }

在派生类Teacher中重写基类中的虚拟方法,使用override关键字,代码如下。

01  public override void Display()                   //重写基类中的Display方法
02  {
03          Console.WriteLine("这是一个老师:");      //在派生类中编写新代码
04          base.Display();                          //调用基类的Display方法显示
05  }
**技巧** 重写时,子类重写方法的访问级别和父类虚拟方法的访问级别必须相同。如上例父类方法是public(public virtual void Display()),子类也必须是public级别。


Warning: Undefined array key 0 in /www/wwwroot/w/show/success.php on line 276

Warning: Trying to access array offset on value of type null in /www/wwwroot/w/show/success.php on line 276

Warning: Undefined array key 0 in /www/wwwroot/w/show/success.php on line 276

Warning: Trying to access array offset on value of type null in /www/wwwroot/w/show/success.php on line 276