文章出處
文章列表
多態的概念:讓一個對象能夠表現出多種的狀態(類型)。
用一句話來描述多態:通過繼承實現的不同對象調用相同的方法,表現出不同的行為,稱之為多態。
多態的作用:把不同的子類對象都當作父類來看,可以屏蔽不同子類對象之間的差異,寫出通用的代碼,做出通用的編程,以適應需求的不斷變化。讓程序具有擴展性,節省成本,提高效率。
實現多態的3種方式: 虛方法、抽象類、接口。
1、虛方法
將父類的方法標記為虛方法,使用關鍵字virtual,這個方法可以被子類重新寫一遍。
在父類的方法前面加上一個virtual,在子類的方法前面加上一個override;如果子類的方法前面不加override,編譯器不會報錯,但這樣的話,就無法通過父類來調用子類的方法,因為這個方法成了子類的獨有的方法,只是名字與父類相同而已,與父類無關。
注意:如果需要對父類的方法進行重寫的話,一定要在子類的方法面前加上overrie進行修飾。
什么時候使用:幾個類可以提取出一個共同的父類,它們都要完成相同的事情,而且這個父類可以被實例化。
例如: 員工9點打卡,經理10點打卡,董事長11點打卡; 這幾個類共同的父類是員工類,它們都要完成打卡這件事情。
public class Employee { public virtual void DaKa() { Console.WriteLine("九點打卡"); } } public class Manager : Employee { public override void DaKa() { Console.WriteLine("經理10點打卡"); } } public class Chairman : Employee { public override void DaKa() { Console.WriteLine("董事長11點打卡"); } }
Employee emp = new Employee(); Manager mg = new Manager(); Chariman cm = new Chariman(); Employee[] emps = { emp, mg,cm }; for (int i = 0; i < emps.Length; i++) { emps[i].DaKa(); } Console.ReadKey();
emps[i].DaKa(); 調用的依然是父類的方法 DaKa(),只不過該方法已經被子類重寫了。具體調用哪一個子類的DaKa()方法,取決于emp[i]里面裝的是哪一個的子類對象。
上面的代碼也體現了里氏轉換原則,子類可以被賦值給父類。通過共同的父類,取消了各個子類之間的差異性。
2、使用虛方法需要注意的幾點:
1)父類中如果有方法需要讓子類重寫,則可以將該方法標記為virtual
2)虛方法在父類中必須有實現,哪怕是空實現
3)虛方法子類可以重寫(override),也可以不重寫
文章列表
全站熱搜