因爲能夠繼承基類的全部成員,子類就都有了相同的行爲,可是有時子類的某些行爲須要相互區別,而子類須要覆蓋父類的方法來實現子類特有的行爲,這就是所謂的多態,多態即相同類型的對象調用相同的方法卻表現出不一樣行爲的現象。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(); } } }
打印結果: