C#学习笔记(二十一)重写与多态

重写:virtual和override

子类对父类纵向的扩展:重写和多态。成员版本的更新。

子类继承父类的方法:必须使用关键字virtualoverride。否则如下提示:

是的,没错,我切换到Rider编辑器上了。

子类对父类成员的隐藏。不写virtualoverride那么两个Run在版本上就没有重写关联关系。此时Car继承自Vehicle,所以自身有两个Run方法,每一个是继承父类,一个是自身的。一个是base的Run,一个是this的Run。如果写上这两个关键字,那么Car就只有一个自己的重写的Run方法。

static void Main(string[] args)
{
    Console.WriteLine("Hello World!");
    Vehicle a = new Car();// is a
    a.Run();
    Vehicle v = new Vehicle();
    Car c = new Car();
    v.Run();
    c.Run();
}

运行结果:

Hello World!
Vehicle is running !
Vehicle is running !
Car is Running!

当添加关键字后,所有继承重写完成。如果再有一层新的继承,新类仍然要写override。Car类的override中其实也暗含了virtual

class Program
{
    static void Main(string[] args)
    {
        Vehicle v = new RaceCar();
        Car c = new RaceCar();
        v.Run();
        c.Run();
    }
}

class Vehicle
{
    public virtual void Run()
    {
        Console.WriteLine("Vehicle is running !");
    }
}

class Car:Vehicle
{
    public override void Run()
    {
        Console.WriteLine("Car is Running!");
    }
}

class RaceCar:Car
{
    public override void Run()
    {
        Console.WriteLine("RaceCar is Running.");
    }
}
RaceCar is Running.
RaceCar is Running.

此时如果要把RaceCar中的override去掉的,或,上面的代码执行结果为:

Car is Running!
Car is Running!

 多态

当用一个父类的变量引用一个子类的对象实例时:调到的版本永远是跟子类实例相关的最新的版本。换句话说:继承的最新版本。

重写与隐藏的发生条件:

  • 函数成员
  • 可见:对子类可见:public,protected。
  • 签名一致:方法名和参数。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值