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汽车不仅可以跑,还可以上高速!

 

 总结:

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

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

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

 

posted @ 2016-07-27 10:45  imstrive  阅读(2370)  评论(0编辑  收藏  举报