1:方法重寫:就是在基類中的方法用virtual關(guān)鍵字來標(biāo)識,然后在繼承類中對該類進(jìn)行重寫
創(chuàng)新互聯(lián)建站堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站建設(shè)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的道里網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
(override),這樣基類中的方法在子類中已經(jīng)被重寫了,基類中的方法在子類中已經(jīng)失去了功能
了。當(dāng)讓基類的對象的引用直接指向繼承類的對象時(多態(tài)性),調(diào)用該方法則是調(diào)用的繼承類中重
寫的方法。
2:方法隱藏:無論基類中的方法是否用了virtual關(guān)鍵字,繼承類中都可以用new關(guān)鍵字(如果不用new
的話,不會產(chǎn)生錯誤,但會生成一個編譯警告)將基類中的方法隱藏,所謂隱藏就是隱藏,不像重
寫,重寫就是基類中的舊方法在子類中已經(jīng)不存在了,而隱藏是基類中的方法和子類中重寫得到的新
方法都存在。所以當(dāng)讓基類的對象的引用直接指向繼承類的對象時(多態(tài)性),調(diào)用該方法則是調(diào)用
的基類的方法。
代碼如下:
class BaseClass { public void functionA() { Console.WriteLine("BaseFunctionA ==="); } public virtual void functionB() { Console.WriteLine("BaseFunctionB ==="); } } class DerivedClass : BaseClass { new public void functionA() { Console.WriteLine("DerivedFunctionA ==="); } public override void functionB() { Console.WriteLine("DerivedFunctionB ==="); } } class Program { static void Main(string[] args) { BaseClass b2 = new DerivedClass(); b2.functionA();//BaseFunctionA === b2.functionB();//DerivedFunctionB === Console.WriteLine("-----"); BaseClass b = new BaseClass(); b.functionA();//BaseFunctionA === b.functionB();//BaseFunctionB === Console.WriteLine("-----"); DerivedClass d = new DerivedClass(); d.functionA();//DerivedFunctionA === d.functionB();//DerivedFunctionB === Console.WriteLine("-----"); } }