淺談重載與重寫

來源:互聯網
上載者:User
重載跟重寫,名字很相近,結構看起來也有幾分神似,但是它們各自的特點還是很鮮明的,不過總有人經常分不清它們兩個。下面我用我粗淺的理解說說他們兩個,希望能夠協助大家理解它們各自的特點。重載跟重寫從作用的範圍和對象上來說的區別就是——重載是類內建函式(方法)之間的一種關係,而重寫則是類與類(父類和子類)之間的一種關係。下面我們一VB.Net為例分析一下  重載: 重載發生於一個類中,通過多個名稱相同的方法(函數)實現,但參數不相同(數量不同、類型不同),或者方法傳回型別不相同來加以區別(需要注意的是,如果僅僅是傳回值不同,是不可以重載的)。 在VB.Net裡面重載的關鍵字為Overloads,看看下面的代碼: 
Public Class Student'聲明一個方法Public Overloads Function GetStuInfo(ByVal Name As String) As StringConsole.WriteLine(Name)Return NothingEnd Function '重載之前聲明的方法,增加了一個參數 Public Overloads Function GetStuInfo(ByVal Name As String, ByVal StuID As String) As StringConsole.WriteLine(Name, StuID)Return NothingEnd Function '第二次重載,增加了一個參數,而且類型也與之前的不同Public Overloads Function GetStuInfo(ByVal Name As String, ByVal Stuid As String, ByVal Age As Integer) As StringConsole.WriteLine(Name, Stuid, Age)Return TrueEnd FunctionEnd Class

 

  

 有一點需要注意:在一個類裡重載時,可以省去關鍵字Overloads,但是前提要保持一致,就是說若省則全省,加則全加。可以簡單概括為“有福同享有難同當”。 總結:1、在使用重載時只能通過相同的方法名,不同的參數類型,不同的參數個數實現;2、不能通過存取權限、拋出的異常進行重載;

3、方法的異常類型和數目不會對重載造成影響;4、如果兩個同名函數僅傳回型別不相同,則它們不能重載。5、如果該方法是重載父類中的方法。那麼必須加 Overloads 關鍵字。 重寫: 重寫是發生在父類與子類之間的關係。就是子類可以重寫父類的方法。它要求子類的方法名稱及參數(類型和數量)必須與父類完全一致。 在 VB.NET 中,重寫汲及到的關鍵字有:

OverRidable: 用於在父類中聲明的可以被重寫的方法。 OverRides: 用於在子類中聲明的要重寫的方法。 MustOverRide: 用於在父類中聲明必須被重寫的方法。此時,該類必須聲明為抽象類別。 MustInherit:用於聲明抽象類別,MustOverRide類型的方法必須在抽象類別中聲明。NotOverridable: 用於在父類中聲明不可以被重寫的方法。  下面是一個小例子: 
'聲明一個必須被繼承的抽象類別Public MustInherit Class PeoplePublic MustOverride Function GetName() As StringEnd Class '聲明一個類並繼承People, Public Class Father : Inherits People '重寫People中的方法 Public Overrides Function GetName() As StringConsole.WriteLine("我的父類是People")Return TrueEnd Function '重新聲明一個方法,用來在子類中使用NotOverridable Public Overridable Function ShowMe() As StringReturn "父親"End FunctionEnd Class '繼承Father並重寫其方法 Public Class Son : Inherits Father '重寫Father中的方法Public Overrides Function GetName() As StringConsole.WriteLine("我的父類是Father")Return TrueEnd Function '聲明一個不可以在Son子類中重寫的方法,要聲明一個NotOverridable的方法,那麼此方法必須同時也聲明為Overrides類型 Public NotOverridable Overrides Function ShowMe() As StringReturn "兒子"End FunctionEnd Class 

 

  

以上代碼中Father類必須重寫People類中的GetName方法,而Son類就可以不重寫。也就是說抽象類別中的抽象方法必須在其直接子類中重寫,而不需要在其”孫類“中重寫。 總結:   1、必須是子類與父類之間。  2、方法名、傳回值類型、參數個數和參數類型都必須相同。  3、子類類重寫的方法的存取權限不能低於基類的許可權(public>protected>default>private)。   4、重寫的方法所拋出的異常必須和被重寫方法的所拋出的異常一致,或者是其子類。   5、被重寫的方法不能為private,否則在其子類中只是新定義了一個方法,並沒有對其進行重寫。   6、靜態方法不能被重寫為非靜態方法(會編譯出錯)。   

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.