zoukankan      html  css  js  c++  java
  • C#之类的继承、抽象类和虚方法

    代码下载地址

    类的继承:

    写电池的基类:包含条码和箱体码两个字段,含有两个参数的构造函数

     1 class Battery
     2     {
     3         public string _barCode;
     4         public string _boxCode;
     5 
     6         public Battery(string barcode, string boxcode)
     7         {
     8             this._barCode = barcode;
     9             this._boxCode = boxcode;
    10         }
    11 
    12         public void ShowInformation()
    13         {
    14             Console.WriteLine("该电池的电池码是{0},箱体码是{1}", this._barCode, this._boxCode);
    15         }
    16     }

    类WX27继承Battery基类,添加字段_voltage,并重写构造函数和方法:

     1 class WX27 : Battery
     2     {
     3         public double _voltage;
     4         public WX27(string barcode,string boxcode ,double voltage):base(barcode,boxcode)
     5         {
     6             this._voltage = voltage;
     7         }
     8 
     9         public new void ShowInformation()
    10         {
    11             Console.WriteLine("该电池的电池码是{0},箱体码是{1},电压是{2}", this._barCode, this._boxCode, this._voltage);
    12         }
    13 
    14         public void ShowVoltage()
    15         {
    16             Console.WriteLine("万向27的电压为{0}", _voltage);
    17         }
    18     }

    测试效果:

     1 WX27 WX = new WX27("123456", "dsfdsf",3.33);
     2 WX.ShowInformation();
     3 WX.ShowVoltage();
     4 
     5 //output-->(不重写ShowInformation)
     6 //该电池的电池码是123456,箱体码是dsfdsf
     7 //万向27的电压为3.33
     8 
     9 //output-->(重写ShowInformation)
    10 //该电池的电池码是123456,箱体码是dsfdsf,电压是3.33
    11 //万向27的电压为3.33

    抽象类

    Car基类,其中的方法不需要提供方法的具体实现,具体的方法在继承的子类体现。

    1     abstract class Car
    2     {
    3         abstract public void Run();
    4     }

    BYD类继承Car类,需要重写抽象方法

    1     class BYD : Car
    2     {
    3         public override void Run()
    4         {
    5             Console.WriteLine("BYD汽车可以跑高速!");
    6         }
    7     }

    WJ类继承Car类,需要重写抽象方法

    1     class WJ : Car
    2     {
    3         public override void Run()
    4         {
    5             Console.WriteLine("玩具汽车不能跑高速!");
    6         }
    7     }

    测试效果:

    1 Car c = new WJ();          
    2 c.Run();
    3 c = new BYD();
    4 c.Run();
    5 
    6 //output-->
    7 //玩具汽车不能跑高速
    8 //BYD汽车可以跑高速!

      

     虚方法:

    构建基类Car,不同于之前的是多了关键字Virtual,如果子类不重写方法Run,则默认调用基类的方法,重写了则调用子类的方法

    与抽象类的区别是,虚方法中基类依然提供了具体的方法,可以选择是否重写。

    1     class Car
    2     {
    3         public virtual void Run()
    4         {
    5             Console.WriteLine("车可以跑!");
    6         }
    7     }

    子类BYD继承Car类

    1     class BYD : Car
    2     {
    3         public override void Run()
    4         {
    5             Console.WriteLine("BYD汽车不仅可以跑,还可以上高速!");
    6         }
    7     }

    测试效果:

    1 Car c = new Car();
    2 c.Run();
    3 c = new BYD(); 
    4 c.Run();
    5 
    6 //output-->
    7 //车可以跑!
    8 //BYD汽车不仅可以跑,还可以上高速!

     总结:

    对于使用上,类的继承可以让子类拥有数据自己的字段,属性及方法,不同的子类在这一块是可以不一样的。

    而类的多态(抽象类、虚方法及接口),则允许使用父类初始化一个子类,用父类直接调用子类的方法,子类的具体实现可以不一样。

    继承的子类也可以用基类初始化,但对于子类特有的方法,父类必须通过里氏转化才能调用这些方法

  • 相关阅读:
    Confluo: Distributed Monitoring and Diagnosis Stack for High-speed Networks
    kubernetes in action
    kubernetes in action
    kubernetes in action
    kubernetes in action
    kubernetes in action
    Kafka: Exactly-once Semantics
    Reinforcement Learning
    unity的 Social API
    hdu 4336 概率dp + 状压
  • 原文地址:https://www.cnblogs.com/imstrive/p/5710193.html
Copyright © 2011-2022 走看看