我們都知道,面向?qū)ο笳Z(yǔ)言的三大特征是:封裝、繼承和多態(tài)。而重寫和重載是多態(tài)的兩種表現(xiàn)形式。多態(tài),顧名思義,就是指多種形態(tài)。而重寫和重載正好體現(xiàn)了這一點(diǎn)?,F(xiàn)在我們以 VB.NET 語(yǔ)言來(lái)說(shuō)明兩者的區(qū)別。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了扎賚諾爾免費(fèi)建站歡迎大家使用!
重寫是發(fā)生在父類與子類之間的關(guān)系。具體來(lái)講就是子類可以重寫父類的現(xiàn)有的方法。它要求子類的方法名稱及參數(shù)必須與父類完全一致。比如吃飯,父親可以吃兩碗面,孩子同樣也是吃面,卻只能吃一碗。
重載則主要是發(fā)生在同一個(gè)類當(dāng)中的,它通過(guò)多個(gè)名稱相同的方法,但方法參數(shù)不相同,或者方法返回類型不相同來(lái)加以區(qū)別。其中,方法參數(shù)不相同包括以下幾種情況:參數(shù)的個(gè)數(shù)不相同,參數(shù)的類型不相同,參數(shù)的對(duì)應(yīng)位置不相同。需要說(shuō)明的是,重載同樣可以應(yīng)用到父類與子類當(dāng)中。即子類重載了父類的方法。
重寫:
在 VB.NET 中,重寫汲及到的關(guān)鍵字有:
OverRidable: 在父類中聲明的可以在子類中重寫的方法。
OverRides: 在子類中聲明的要重寫父親中可重寫的方法。
MustOverRide: 在父類中,表示這個(gè)方法必須在子類中重寫。此時(shí),該類必須聲明為抽象類。
NotOverridable: 如果當(dāng)前類還有子類,那么,在其子類中,該方法不允許被重寫。
重載:
在 VB.NET 中,重載用到的關(guān)鍵是 OverLoads。
這里需要說(shuō)明幾點(diǎn):
1. 對(duì)于在同一類當(dāng)中,一組名稱相同的方法或函數(shù)重載時(shí),可以加關(guān)鍵字 OverLoads 或者不加。但如果其中有一個(gè)方法加上,那同組其它方法也必須加該關(guān)鍵字。
2. 如果該方法是重載父類中的方法。那么必須加 OverLoads 關(guān)鍵字。
3. 如果兩個(gè)同名函數(shù)僅返回類型不相同,則它們不能重載,即必須在參數(shù)上有所不同。
顧名思義,new就是給變量賦值一個(gè)新的對(duì)象
dim不加new就是說(shuō)變量是XX類型的,但它不是一個(gè)真正的XX對(duì)象。如果給這個(gè)變量賦值的話,實(shí)際上就是把某一對(duì)象的指針存到變量里,它依舊不是一個(gè)對(duì)象
一個(gè)普通的類,里面有一些數(shù)據(jù),你要弄一個(gè)對(duì)象的話,需要初始化所有類中的數(shù)據(jù)并調(diào)用構(gòu)造函數(shù)。這時(shí)候我們就用new了。如果你不用new,然后直接使用的話,會(huì)引發(fā)null異常
當(dāng)然上面的討論不包括Integer、String、Long這樣的數(shù)值類型,這些不能用new
replace有重載方法,可以替換1~任意可能個(gè)
別用string的replace,直接用replace
是關(guān)鍵字。比如:SUB代表一個(gè)函數(shù)的開(kāi)始,END SUB代表函數(shù)結(jié)束,函數(shù)主體語(yǔ)句就必須寫在這兩個(gè)關(guān)鍵字之間。CLASS類關(guān)鍵字,PRIVATE私有關(guān)鍵字,PUBLIC公用關(guān)鍵字,IF.....END IF是判斷關(guān)鍵字,等等。建議找本基礎(chǔ)書看一看。
VB.NET中的Default關(guān)鍵字是用來(lái)聲明類的默認(rèn)屬性的 默認(rèn)屬性可以直接使用“對(duì)象名(參數(shù))”的形式來(lái)調(diào)用 而不用寫出屬性名
舉個(gè)例子:
'先聲明1個(gè)類
Public Class myclass
Dim a1 As Integer=1
Dim a2 As Integer=2
Default Public Property geta(ByVal x As Integer) As Integer
Get
If x=1 Then Return a1 Else Return a2
Set(ByVal value As Integer)
If x=1 Then a1=value Else a2=value
End Property
End Class
'這里的geta就是默認(rèn)屬性,后邊在主函數(shù)里調(diào)用它
Public Class test
Shared Sub Main()
Dim obj As myclass=New myclass()
Console.WriteLine("{0} {1}",obj(1),obj(2))
End Sub
End Class
最后輸出結(jié)果為:1 2
也就是說(shuō)可以直接使用obj(1)這樣的格式 而不用使用obj.geta(1)這樣的格式了
注意 默認(rèn)屬性必須至少帶有1個(gè)參數(shù)
str1是數(shù)字類型而strrow是文字類型,所以出錯(cuò)。。
把str1轉(zhuǎn)成string就可以了。。。