C#中多態的實現

因爲能夠繼承基類的全部成員,子類就都有了相同的行爲,可是有時子類的某些行爲須要相互區別,而子類須要覆蓋父類的方法來實現子類特有的行爲,這就是所謂的多態,多態即相同類型的對象調用相同的方法卻表現出不一樣行爲的現象。ide

一.實現多態的兩種常見方式spa

(1).虛方法(virtual):將父類的方法,添加關鍵字virtual,此方法在子類中用override重寫。code

(2).抽象類與抽象方法(abstarct):有時候基類的做用只是爲子類提供公共成員,沒有具體的實現操做,那麼此時能夠將基類及其方法定義爲抽象的。子類中的方法仍用override重寫。對象

 

二.虛方法(virtual)的使用blog

咱們知道比較有名的車,有寶馬,奔馳等,能夠從它們中抽象出一個汽車基類,而寶馬車,奔馳車做爲子類繼承

(1).基類string

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Polymorphic { public class Car { public virtual void carName() { Console.WriteLine("這是汽車"); } } }

(2).子類it

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Polymorphic { public class BaoMa:Car { public override void carName() { //base.carName();
            Console.WriteLine("這是寶馬汽車"); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Polymorphic { public class BenChi:Car { public override void carName() { //base.carName();
            Console.WriteLine("這是奔馳汽車"); } } }

(3).調用io

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Polymorphic { class Program { static void Main(string[] args) { Car car = new Car(); BenChi benChi = new BenChi(); BaoMa baoMa = new BaoMa(); Car[] cars = { car, benChi, baoMa }; foreach (Car c in cars) { c.carName(); } Console.ReadKey(); } } }

打印結果:class

三.關鍵字abstract實現多態

動物分不少種,好比說牛,馬等,但它們發出的聲音都是不相同的。

(1).基類

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Polymorphic { public abstract class Animal { //動物聲音
        public abstract void Voice(); } }

(2).子類

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Polymorphic { class Horse:Animal { //馬的聲音
        public override void Voice() { Console.WriteLine("馬的聲音"); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Polymorphic { class Cattle:Animal { //牛的聲音
        public override void Voice() { Console.WriteLine("牛的聲音"); } } }

(3).調用

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Polymorphic { class Program { static void Main(string[] args) { Horse horse = new Horse(); Cattle cattle = new Cattle(); Animal[] animals = { horse, cattle }; foreach (Animal animal in animals) { animal.Voice(); } Console.ReadKey(); } } }

打印結果:

相關文章
相關標籤/搜索