c#中的重載和重寫區(qū)別

? 重載的條件:

??????????1.必須在同一個類中2.方法名必須相同3.參數(shù)列表不能相同。


???重寫的條件:


??????????1. 在不同的類中


????????? 2. 發(fā)生方法重寫的兩個方法返回值,方法名,參數(shù)列表必須完全一致


????????? 3. 子類拋出的異常不能超過父類相應(yīng)的方法拋出的異常


????????? 4. 子類方法的訪問級別不能低于父類相應(yīng)方法的訪問級別(public,package,protected, private)


????????? 5.方法體不同



super()調(diào)用父類構(gòu)造,super.只能調(diào)用父類的實(shí)例方法


this()調(diào)用該類的其他構(gòu)造方法,this.調(diào)用類的屬性,方法


如果父類有有參構(gòu)造,子類必須定義構(gòu)造方法



重載:



?????? 重載發(fā)生在同一個類中;重載主要是針對同一個類中方法名相同但參數(shù)(必須的)不同或返回類型(不是必須的)不同的情況??梢詤⒄杖缦碌拇a




class OverLoadTest


????{


????????public void Hello()


????????{


????????}


????????public void Hello(string str)


????????{


????????}


????????public string Hello()


????????{


????????}


????}


在這段代碼中有三個具有相同名稱的方法Hello,他們彼此之間是重載的關(guān)系,注意兩點(diǎn):他們共同存在于一個類中,雖有同樣的名字但是執(zhí)行不同的操作;第一個方法和第三個方法只有返回類型不同,這在C# 中是不允許的,編譯器會報出“已定義一個名為"Hello"的方法”的錯誤。




重寫:



??????重寫發(fā)生在有繼承關(guān)系的類之間


??????重寫發(fā)生在派生類上,通過override關(guān)鍵字來改寫從其父類繼承過來的具有相同返回值,方法名稱和參數(shù)列表的方法。



????class Program


????{


????????static void Main(string[] args)


????????{


????????????OverWriteTestTT owTT = new OverWriteTestTT();


????????????owTT.Hello();


????????????overWriteTestTTT owTTT = new overWriteTestTTT();


????????????owTTT.Hello();


????????}


????}


????class OverWriteTest


????{


????????//Over write the method ToString();


????????public override string ToString()


????????{


????????????return "hello world";


????????}


????????//Define a virtual method Hello() to be over written


????????public virtual void Hello()


????????{


????????????Console.WriteLine("hello");


????????}


????}


????class OverWriteTestTT : OverWriteTest


????{


????????public override void Hello()


????????{


????????????Console.WriteLine("No hello world");


????????}


????}


????class overWriteTestTTT : OverWriteTestTT


????{


????????//Over write the method Hello() of class OverWriteTestTT


????????public override void Hello()


????????{


????????????base.Hello();


????????????Console.WriteLine("NNo hello world");


????????}


????}


上面這段代碼演示了如何對父類的方法進(jìn)行重寫,需要注意的地方有兩點(diǎn):可以在子類中被重寫的方法一定要被標(biāo)記成virtual(虛擬), abstract(抽象), override(重寫)標(biāo)記為virtual 和abstract 的函數(shù)就是為了重寫而創(chuàng)建的,標(biāo)記為override的函數(shù)本身是由前兩種函數(shù)重寫而來的,所以它可以被重寫也是順理成章的了;重寫的函數(shù)必須在子類中出現(xiàn),而且任何一個父類的函數(shù)在其一個子類中只能被重寫一次。(這一點(diǎn)很好理解,當(dāng)你要重寫兩次時,該子類中將定義兩個返回類型,方法名稱 和參數(shù)列表都相同的函數(shù),這肯定是不可能的)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,679評論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • (一)Java部分 1、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨(dú)云閱讀 7,257評論 0 62
  • 昨天開完家長會回來心情十分復(fù)雜。去開家長會之前是完全做好了心理準(zhǔn)備的,心情十分平靜。開完家長會之后,找老師簡單地聊...
    嚕小嚕閱讀 256評論 7 7
  • 項(xiàng)目管理菜鳥一枚 大學(xué)的時候被忽悠報了二學(xué)歷(成人教育)的項(xiàng)目管理,學(xué)分已經(jīng)修夠了(雖然平常沒去上過課),現(xiàn)階段迎...
    槑頭腦閱讀 489評論 0 0

友情鏈接更多精彩內(nèi)容