過載和重寫

2021-06-03 02:09:09 字數 2390 閱讀 7635

物件導向的三大特性:繼承、封裝、多型。過載和重寫是多型的兩種表現形式。

過載和重寫又有什麼區別呢?

1、層次不同:

重寫 :    發生在父類和子類之間。

是子類重寫父類的方法,具有相同的方法名和方法引數。比如說,父子兩人都去吃飯(相同的方法),吃的是麵條(引數),父親飯量大,吃兩碗,兒子飯量小,就能吃一碗(實現了吃飯的多型)。

過載:   發生在同乙個類當中。

2、**中的不同

重寫:mustinherit關鍵字宣告乙個抽象類

抽象類中mustoverride關鍵字宣告乙個必須重寫的方法

子類中overrides 關鍵字的兩層含義:   

指明某方法重寫了父類的方法 

這個方法可以在它的子類中被隱式重寫

子類中overridable關鍵字宣告可以被重寫的函式

notoverridable 指明該方法不可被重寫

'mustinherit關鍵字宣告乙個抽象類

public mustinherit class people

'mustoverride關鍵字宣告乙個必須重寫的吃飯方法

public mustoverride sub eat(byval foodname as string, byval num as integer)

end class

'宣告乙個父親類,繼承自people類

public class father : inherits people

'這裡必須要重寫people類的吃飯方法,overrides關鍵字會自動生成。

'overrides 關鍵字的兩層含義:

'1、它重寫了抽象父類people的eat(抽象)方法

'2、這個方法可以在它的子類中被隱式重寫,因此它不包含overridable關鍵字

public overrides sub eat(byval foodname as string, byval num as integer)

console.writeline("父親吃,他可以吃碗!", foodname, num)

end sub

' overridable關鍵字宣告乙個可以被重寫的函式

public overridable function getbyname() as string

return "父親"

end function

'宣告另外乙個方法,用來說明子類中使用notoverridable

public overridable sub showmyfatherclass()

console.writeline("我的父類是people")

end sub

end class

public class son : inherits father

'因為father類中沒有用mustoverride 關鍵字生命的方法,所以,繼承的子類不會自動新增父類中的方法

'要想重寫父類中的方法,這裡就需要手動實現。

'子類重寫父類的eat方法

'做兩點說明:

'抽象類的抽象方法只需要在其直接子類中強制實現,不用在其他子類中(包括孫類)中實現

public overrides sub eat(byval foodname as string, byval num as integer)

console.writeline("孩子吃,他能吃碗", foodname, num)

end sub

'重寫父類father中定義的getbyname方法

public overrides function getbyname() as string

'如果要實現父類的實現過程,則使用mybase關鍵字

'return mybase.getbyname()

return "孩子"

end function

'重寫father類中的showmyfatherclass方法(overrides關鍵字指明),但是如果son類,還有子類的話,子類不可以重寫該方法(notoverridable關鍵字說明)。

public notoverridable overrides sub showmyfatherclass()

mybase.showmyfatherclass()

end sub

end class

過載:過載的**規定相對比較容易,做幾點說明:

1、同乙個類中,如果一組同名的方法、函式可加關鍵字overloads 也可不加,但是這一組的函式、方法格式應該保持一致

2、如果該方法是過載父類中的方法,那麼必須加上關鍵字overloads

3、如果兩個同名函式僅返回值型別不同,那麼他們不能過載,必須要在引數上有所不同

過載和重寫

asp.net unity開發 net培訓 期待與您交流!過載 乙個類裡面有多個方法,方法名稱是相同的,返回值可以不同,引數列表的個數 型別 順序不同。區分過載方法可以通過引數列表的個數 型別 順序來決定呼叫哪個方法。過載可以子類過載父類的方法,並且可以靜態非靜態之間轉換。重寫 覆蓋 一般是指父類和...

重寫 和 過載

型構就是指方法的組成結構,具體包括方法的名稱和引數,涵蓋引數的數量 型別以及出現的順序,但是不包括方法的返回值型別,訪問許可權修飾符,以及abstract static final等修飾符。1.public void method int i,string s 4.5.public string m...

過載和重寫

重寫方法的規則 1 引數列表必須完全與被重寫的方法相同,否則不能稱其為重寫而是過載。2 返回的型別必須一直與被重寫的方法的返回型別相同,否則不能稱其為重寫而是過載。3 訪問修飾符的限制一定要大於被重寫方法的訪問修飾符 public protected default private 4 重寫方法一定...