类的继承:
写电池的基类:包含条码和箱体码两个字段,含有两个参数的构造函数
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汽车不仅可以跑,还可以上高速!
总结:
对于使用上,类的继承可以让子类拥有数据自己的字段,属性及方法,不同的子类在这一块是可以不一样的。
而类的多态(抽象类、虚方法及接口),则允许使用父类初始化一个子类,用父类直接调用子类的方法,子类的具体实现可以不一样。
继承的子类也可以用基类初始化,但对于子类特有的方法,父类必须通过里氏转化才能调用这些方法。